# ----------------------------------------------- Imports ------------------------------------------------------------
import os
import sys
import atexit
import logging

# ----------------------------------------------- Logging Setup ------------------------------------------------------------
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)

# ----------------------------------------------- Main ------------------------------------------------------------
if __name__ == "__main__":
    # Добавляем папку app в Python path
    sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'app'))
    from app.api import api, voice_inst, current_obsidian_settings
    from app.heartbeat_monitor import HeartbeatMonitor
    from app.workflows import graph_history_manager

    logger.info("🚀 Запуск LLM Agent Backend сервера...")
    logger.info("📍 API будет доступно на: http://localhost:5000/api")
    logger.info("📊 Список графов: http://localhost:5000/api/graphs")
    logger.info("💬 Чат эндпоинт: http://localhost:5000/api/chat")
    logger.info("\n⚠️  Для остановки нажмите Ctrl+C\n")

    # TODO: Есть проблема с двойным запуском, скорее всего, всего приложения
    # Если api.debug == True, то проверяем FLASK_RUN_FROM_RELOADER.
    # Если api.debug == False, то FLASK_RUN_FROM_RELOADER, скорее всего, не будет установлен,
    # и условие `not api.debug` будет True, что приведет к запуску HeartbeatMonitor.
    if not api.debug or os.environ.get("FLASK_RUN_FROM_RELOADER") != "true":
        heartbeat_monitor = HeartbeatMonitor(interval_minutes=5)
        heartbeat_monitor.start()
        atexit.register(heartbeat_monitor.stop)
        logger.info("HeartbeatMonitor запущен.")


    from app.heartbeat_monitor import VoiceHeartbeatMonitor

    v_monitor = VoiceHeartbeatMonitor(
        voice_inst, 
        graph_history_manager.title_generator, 
        lambda: current_obsidian_settings # Теперь берет настройки из api.py
    )
    v_monitor.start()


    api.run(
        debug=False, # True - тогда всё по 2 раза запускает
        port=5000,
        host='localhost',
        threaded=True
    )