#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os

# from concurrent import futures

import grpc
import asyncio
from quickgrpc.utils import add_grpc_service


from pydantic import Extra
from pydantic_settings import BaseSettings


class ServerConfig(BaseSettings):
    grpc_port: int

    class config:
        extra = Extra.ignore


settings = ServerConfig()


async def start_server():
    # grpc_server = grpc.server(
    #    futures.threadpoolexecutor(
    #        max_workers=20
    #    )
    # )
    grpc_server = grpc.aio.server()
    grpc_server.add_insecure_port(f"[::]:{settings.grpc_port}")
    if os.path.exists("rpc"):
        [
            add_grpc_service(x.replace(".py", ""), grpc_server)
            for x in os.listdir("rpc")
            if "tests" not in x and "__" not in x and x.endswith(".py")
        ]
        print("starting grpc server...")
        await grpc_server.start()
        await grpc_server.wait_for_termination()
    else:
        print("no rpc services found, skipping grpc server start")


if __name__ == "__main__":
    asyncio.run(start_server())
