from .errors import AIError
from .providers.base import ModelProvider
from .schemas import PlanRequest, PlanResult
from .tools import ToolRegistry


class Supervisor:
    def __init__(self, provider: ModelProvider, registry: ToolRegistry):
        self.provider = provider
        self.registry = registry

    async def plan(self, request: PlanRequest) -> PlanResult:
        tools = self.registry.select(request.allowed_tools)
        result = await self.provider.create_plan(request, tools)
        self.registry.validate_plan(result.plan, request.allowed_tools)
        if result.provider != self.provider.name:
            raise AIError("PROVIDER_IDENTITY_INVALID", "Provider identity did not match.", 502)
        return result
