"""MTF Pullback Bot — OOS Dry-run Entry Point."""

import asyncio
import signal as sig
from dotenv import load_dotenv
from loguru import logger
from src.mtf_bot import MTFPullbackBot
from src.logger_setup import setup_logger

load_dotenv()


async def main():
    setup_logger(log_level="INFO")
    logger.info("MTF Pullback Bot 시작 (Dry-run OOS 모드)")

    bot = MTFPullbackBot(symbol="XRP/USDT:USDT")

    loop = asyncio.get_running_loop()
    shutdown = asyncio.Event()

    def _on_signal():
        logger.warning("종료 시그널 수신 (SIGTERM/SIGINT)")
        shutdown.set()

    for s in (sig.SIGTERM, sig.SIGINT):
        loop.add_signal_handler(s, _on_signal)

    bot_task = asyncio.create_task(bot.run(), name="mtf-bot")
    shutdown_task = asyncio.create_task(shutdown.wait(), name="shutdown-wait")

    done, pending = await asyncio.wait(
        [bot_task, shutdown_task],
        return_when=asyncio.FIRST_COMPLETED,
    )

    bot_task.cancel()
    shutdown_task.cancel()
    await asyncio.gather(bot_task, shutdown_task, return_exceptions=True)
    logger.info("MTF Pullback Bot 종료")


if __name__ == "__main__":
    asyncio.run(main())
