"""
캘린더 동기화 서비스
- 서비스 클래스 기준: 최대 350줄
- 간결함 원칙: Todo ↔ 캘린더 동기화만 담당
"""
import logging
from typing import Dict, Any, Optional
from ..models.todo import TodoItem
from ..integrations.calendar import get_calendar_router

logger = logging.getLogger(__name__)


class CalendarSyncService:
    """Todo와 캘린더 간 동기화 서비스"""
    
    def __init__(self):
        self.calendar_router = get_calendar_router()
    
    async def sync_todo_create(self, todo_item: TodoItem) -> Dict[str, Any]:
        """새 할일을 캘린더에 생성"""
        try:
            result = await self.calendar_router.sync_todo_to_calendars(todo_item)
            logger.info(f"할일 {todo_item.id} 캘린더 생성 완료")
            return {"success": True, "result": result}
            
        except Exception as e:
            logger.error(f"할일 {todo_item.id} 캘린더 생성 실패: {e}")
            return {"success": False, "error": str(e)}
    
    async def sync_todo_complete(self, todo_item: TodoItem) -> Dict[str, Any]:
        """완료된 할일의 캘린더 태그 업데이트 (todo → 완료)"""
        try:
            # 향후 구현: 기존 이벤트를 찾아서 태그 업데이트
            logger.info(f"할일 {todo_item.id} 완료 상태로 캘린더 업데이트")
            return {"success": True, "action": "completed"}
            
        except Exception as e:
            logger.error(f"할일 {todo_item.id} 완료 상태 캘린더 업데이트 실패: {e}")
            return {"success": False, "error": str(e)}
    
    async def sync_todo_delay(self, todo_item: TodoItem) -> Dict[str, Any]:
        """지연된 할일의 캘린더 날짜 수정"""
        try:
            # 향후 구현: 기존 이벤트를 찾아서 날짜 수정
            logger.info(f"할일 {todo_item.id} 지연 날짜로 캘린더 업데이트")
            return {"success": True, "action": "delayed"}
            
        except Exception as e:
            logger.error(f"할일 {todo_item.id} 지연 날짜 캘린더 업데이트 실패: {e}")
            return {"success": False, "error": str(e)}
    
    async def sync_todo_delete(self, todo_item: TodoItem) -> Dict[str, Any]:
        """삭제된 할일의 캘린더 이벤트 제거"""
        try:
            # 향후 구현: 기존 이벤트를 찾아서 삭제
            logger.info(f"할일 {todo_item.id} 캘린더 이벤트 삭제")
            return {"success": True, "action": "deleted"}
            
        except Exception as e:
            logger.error(f"할일 {todo_item.id} 캘린더 이벤트 삭제 실패: {e}")
            return {"success": False, "error": str(e)}


# 전역 인스턴스
_calendar_sync_service: Optional[CalendarSyncService] = None


def get_calendar_sync_service() -> CalendarSyncService:
    """캘린더 동기화 서비스 싱글톤 인스턴스"""
    global _calendar_sync_service
    if _calendar_sync_service is None:
        _calendar_sync_service = CalendarSyncService()
    return _calendar_sync_service
