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.inventory_planning_task import compute_inventory_planning_snapshot

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


def inventory_planning_cron():
    """Inventory planning snapshot cron - runs at 4:00 AM"""
    if scheduler.running:
        return
    
    def job():
        db = get_db_session()
        try:
            cron_log = CronJobLog(
                task_type="inventory_planning",
                status="started",
                started_at=datetime.utcnow()
            )
            db.add(cron_log)
            db.commit()
            
            task = compute_inventory_planning_snapshot.delay()
            cron_log.task_id = task.id
            db.commit()
            
        except Exception as e:
            logger.error(f"Inventory planning cron error: {e}")
        finally:
            db.close()
    
    scheduler.add_job(job, CronTrigger(hour=5, minute=0), id='inventory_planning', replace_existing=True)
    scheduler.start()
    logger.info("Inventory planning cron started - runs at 5:00 AM")
