"""データ同期サービス"""
import asyncio
from typing import Optional

from src.mcp.client import MCPClient
from src.ai_agents.interview_agent import AIAgent
from src.database.models import CandidateDates
from src.services.pigeon_cloud_service import PigeonCloudService


class SyncService:
    """MCPからデータを取得してデータベースに同期するサービス"""

    def __init__(self, pigeon_cloud_service: Optional[PigeonCloudService] = None) -> None:
        self.pigeon_cloud_service = pigeon_cloud_service or PigeonCloudService()

    async def sync_interview_data(self, instructions=None) -> CandidateDates:
        """
        面接データを取得してデータベースに同期

        Args:
            instructions: カスタム指示書（省略時はデフォルトのINSTRUCTIONSを使用）

        Returns:
            CandidateDates: 取得した候補者データ
        """
        async with MCPClient() as mcp_client:
            # MCPサーバーを使用してエージェントを実行
            agent = AIAgent(mcp_client.get_mcp_servers(), instructions=instructions)
            result = await agent.run()

            # データベース更新処理（後ほど実装）
            # TODO: ここに自社データベースへの更新処理を追加
            # await self._update_database(result)

            return result

    async def _update_database(self, _data: CandidateDates):
        """
        データベースに候補者データを更新

        Args:
            _data: 更新する候補者データ

        Note:
            この関数は後ほど実装予定
        """
        # TODO: 自社データベースへの接続と更新処理を実装
        pass

    async def update_pigeon_cloud(self, job_id: Optional[str], full_name, interview_day, interview_start):
        """Pigeon Cloud へ面接日程を同期"""
        await asyncio.to_thread(
            self.pigeon_cloud_service.sync_interview_dates,
            job_id,
            interview_day,
            interview_start
        )
