import logging
from apscheduler.schedulers.asyncio import AsyncIOScheduler
from apscheduler.triggers.interval import IntervalTrigger

logger = logging.getLogger(__name__)

scheduler = AsyncIOScheduler()


def start_scheduler(trade_monitor_func, bot_cycle_func):
    """
    Register scheduled jobs and start the APScheduler.

    Args:
        trade_monitor_func: async function — checks open trades every 30s.
        bot_cycle_func:     async function — runs signal scan every 5 minutes.
    """
    # Check open trades for SL/TP hits every 30 seconds
    scheduler.add_job(
        trade_monitor_func,
        trigger=IntervalTrigger(seconds=30),
        id="trade_monitor",
        replace_existing=True,
        misfire_grace_time=10,
    )

    # Run full signal analysis cycle every 5 minutes
    scheduler.add_job(
        bot_cycle_func,
        trigger=IntervalTrigger(minutes=5),
        id="bot_cycle",
        replace_existing=True,
        misfire_grace_time=60,
    )

    scheduler.start()
    logger.info("Scheduler started: trade_monitor (30s), bot_cycle (5m)")


def stop_scheduler():
    if scheduler.running:
        scheduler.shutdown(wait=False)
        logger.info("Scheduler stopped")
