from __future__ import annotations

from typing import Any

from app.agents.specialists import (
    AuditInspectionAgent,
    ContractManagementAgent,
    InternalDossierReviewAgent,
    LegalComplianceAgent,
    PaymentSettlementAgent,
    ProcurementTenderAgent,
    ProjectPlanningAgent,
    TechnicalDeliveryAgent,
)
from app.core.postgres import PostgresClient
from app.modules.core.application.hybrid_search_service import HybridSearchService
from app.modules.core.application.review_memory_service import ReviewMemoryService

from .orchestrator_ingestion import OrchestratorIngestionMixin
from .orchestrator_routing import OrchestratorRoutingMixin


class TaskOrchestrator(
    OrchestratorRoutingMixin,
    OrchestratorIngestionMixin,
):
    """Coordinates retrieval and logical-agent execution."""

    def __init__(
        self, llm_client: Any, qdrant_store: Any, embedding_service: Any
    ) -> None:
        self._qdrant_store = qdrant_store
        self._embedding_service = embedding_service
        self._hybrid_search_service = HybridSearchService(
            qdrant_store, embedding_service
        )
        self._postgres_client = PostgresClient()
        self._review_memory_service = ReviewMemoryService()
        self._agents = {
            "legal_compliance": LegalComplianceAgent(llm_client),
            "project_planning": ProjectPlanningAgent(llm_client),
            "procurement_tender": ProcurementTenderAgent(llm_client),
            "contract_management": ContractManagementAgent(llm_client),
            "technical_delivery": TechnicalDeliveryAgent(llm_client),
            "payment_settlement": PaymentSettlementAgent(llm_client),
            "audit_inspection": AuditInspectionAgent(llm_client),
            "dossier_review": InternalDossierReviewAgent(llm_client),
        }
