from typing import Any

from common_logging import get_logger

from .plugin_registry import plugin_registry

logger = get_logger(__name__)


class TenantService:

    def __init__(self):
        self.tenants: dict[int, dict[str, Any]] = {}

    def create_tenant(self, name: str, plan: str, config: dict[str, Any]=None) -> int:
        tenant_id = len(self.tenants) + 1
        self.tenants[tenant_id] = {'id': tenant_id, 'name': name, 'plan': plan, 'config': config or {}, 'enabled_plugins': set()}
        logger.bind(tenant_id=tenant_id, plan=plan).info("Tenant created")
        return tenant_id

    def enable_plugin(self, tenant_id: int, plugin_name: str):
        if tenant_id not in self.tenants:
            raise ValueError(f'Tenant {tenant_id} not found')
        plugin_registry.enable_for_tenant(tenant_id, plugin_name)
        self.tenants[tenant_id]['enabled_plugins'].add(plugin_name)
        logger.bind(tenant_id=tenant_id, plugin=plugin_name).info("Plugin enabled")

    def disable_plugin(self, tenant_id: int, plugin_name: str):
        if tenant_id not in self.tenants:
            raise ValueError(f'Tenant {tenant_id} not found')
        plugin_registry.disable_for_tenant(tenant_id, plugin_name)
        self.tenants[tenant_id]['enabled_plugins'].discard(plugin_name)
        logger.bind(tenant_id=tenant_id, plugin=plugin_name).info("Plugin disabled")

    def get_tenant(self, tenant_id: int) -> dict[str, Any]:
        return self.tenants.get(tenant_id)
tenant_service = TenantService()
