"""APScheduler setup for background jobs."""
import logging

from apscheduler.schedulers.asyncio import AsyncIOScheduler
from apscheduler.triggers.cron import CronTrigger

from app.core.config import settings

logger = logging.getLogger(__name__)

scheduler = AsyncIOScheduler(timezone=settings.TIMEZONE)


async def _run_storage_sync() -> None:
    if not settings.GDRIVE_SYNC_ENABLED:
        logger.debug("GDRIVE_SYNC_ENABLED=False, skipping storage sync")
        return

    from app.core.database import AsyncSessionLocal
    from app.jobs.sync_storage import sync_local_to_gdrive

    logger.info("Starting nightly GDrive storage sync...")
    async with AsyncSessionLocal() as db:
        stats = await sync_local_to_gdrive(db)
    logger.info("Nightly sync done: %s", stats)


def setup_scheduler() -> AsyncIOScheduler:
    scheduler.add_job(
        _run_storage_sync,
        CronTrigger(hour=22, minute=0, timezone=settings.TIMEZONE),
        id="sync_storage",
        replace_existing=True,
        misfire_grace_time=3600,
    )
    return scheduler
