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.slow_movers_task import compute_slow_movers_90d

logger = logging.getLogger(__name__)
scheduler = BackgroundScheduler()


def slow_movers_cron():
    """Slow mover computation cron - runs at 3:00 AM"""
    if scheduler.running:
        return
    
    def job():
        db = get_db_session()
        try:
            cron_log = CronJobLog(
                task_type="slow_movers",
                status="started",
                started_at=datetime.utcnow()
            )
            db.add(cron_log)
            db.commit()
            
            task = compute_slow_movers_90d.delay()
            cron_log.task_id = task.id
            db.commit()
            
        except Exception as e:
            logger.error(f"Slow movers cron error: {e}")
        finally:
            db.close()
    
    scheduler.add_job(job, CronTrigger(hour=4, minute=0), id='slow_movers', replace_existing=True)
    scheduler.start()
    logger.info("Slow movers cron started - runs at 4:00 AM")
