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.products_fetch_task import product_fetch

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


def products_fetch_cron():
    """Product fetch cron - runs at 2:00 AM"""
    if scheduler.running:
        return
    
    def job():
        db = get_db_session()
        try:
            cron_log = CronJobLog(
                task_type="product_fetch",
                status="started",
                started_at=datetime.utcnow()
            )
            db.add(cron_log)
            db.commit()
            
            task = product_fetch.delay(
                company_id=2,
                page_number=1,
                page_size=10,
                total_pages=5
            )
            cron_log.task_id = task.id
            db.commit()
            
        except Exception as e:
            logger.error(f"Product fetch cron error: {e}")
        finally:
            db.close()
    
    scheduler.add_job(job, CronTrigger(hour=2, minute=0), id='products_fetch', replace_existing=True)
    scheduler.start()
    logger.info("Products fetch cron started - runs at 2:00 AM")
