import logging
from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.triggers.cron import CronTrigger
from datetime import datetime

from src.utils.db import get_db_session
from src.smart_inventory.jobs.cron_model import CronJobLog
from src.smart_inventory.tasks.service_level_task import compute_service_level_daily

logger = logging.getLogger(__name__)
scheduler = BackgroundScheduler()


def service_level_cron():
    """Service level computation cron - runs at 2:00 AM"""
    if scheduler.running:
        return
    
    def job():
        db = get_db_session()
        try:
            cron_log = CronJobLog(
                task_type="service_level",
                status="started",
                started_at=datetime.utcnow()
            )
            db.add(cron_log)
            db.commit()
            
            task = compute_service_level_daily.delay()
            cron_log.task_id = task.id
            db.commit()
            
        except Exception as e:
            logger.error(f"Service level cron error: {e}")
        finally:
            db.close()
    
    scheduler.add_job(job, CronTrigger(hour=3, minute=0), id='service_level', replace_existing=True)
    scheduler.start()
    logger.info("Service level cron started - runs at 3:00 AM")
