import time
from datetime import datetime

from .config import config
from .database import db
from .delta_api import delta_api
from .logger import get_logger
from .slot_loader import load_active_slots
from .strategy_pump_reversal import strategy
from .telegram_alert import send_telegram


log = get_logger(__name__)


def assert_paper_mode() -> None:
    if not config.is_paper_only:
        raise RuntimeError("Live trading is disabled for Phase 1. Set ENABLE_LIVE_TRADING=false.")


def run() -> None:
    assert_paper_mode()
    db.set_setting("bot_status", "running")
    send_telegram("Delta Pump Reversal bot started in Paper Mode.")
    log.info("Bot started in Paper Mode")
    try:
        delta_api.sync_symbols()
        while True:
            slots = load_active_slots()
            prices = delta_api.latest_prices()
            now = datetime.utcnow()
            if prices and slots:
                strategy.on_prices(prices, slots, now)
            time.sleep(config.scan_interval_seconds)
    except KeyboardInterrupt:
        log.info("Bot stopped by keyboard interrupt")
    except Exception as exc:
        log.exception("Bot crashed")
        send_telegram(f"Error occurred: {exc}")
        raise
    finally:
        db.set_setting("bot_status", "stopped")
        send_telegram("Delta Pump Reversal bot stopped.")


if __name__ == "__main__":
    run()

