import asyncio
from ...application.use_cases.schedule_periodic_search import SchedulePeriodicSearchUseCase
from ...infrastructure.repositories.mongodb_search_repository import MongoDBSearchRepository
from ...core.database import get_database
import logging

logger = logging.getLogger(__name__)

class SchedulerService:
    
    def __init__(self):
        self.scheduler_use_case = None
        self.task = None
    
    async def start(self):
        """Start the scheduler service"""
        try:
            database = await get_database()
            search_repository = MongoDBSearchRepository(database)
            self.scheduler_use_case = SchedulePeriodicSearchUseCase(search_repository)
            
            # Start the scheduler in background
            self.task = asyncio.create_task(self.scheduler_use_case.start_scheduler())
            logger.info("Scheduler service started")
            
        except Exception as e:
            logger.error(f"Error starting scheduler service: {e}")
            raise
    
    async def stop(self):
        """Stop the scheduler service"""
        try:
            if self.scheduler_use_case:
                self.scheduler_use_case.stop_scheduler()
            
            if self.task:
                self.task.cancel()
                try:
                    await self.task
                except asyncio.CancelledError:
                    pass
            
            logger.info("Scheduler service stopped")
            
        except Exception as e:
            logger.error(f"Error stopping scheduler service: {e}")

scheduler_service = SchedulerService()
