"""
DAZN EPG Bot
Automazione completa della pipeline DAZN EPG:
1. Scarica l'EPG ufficiale ogni giorno alle 00:05.
2. Scansiona il flusso live tramite OCR ogni minuto.
3. Effettua il merge dei dati (ufficiale + OCR) generando l'EPG unificato ogni minuto.
"""

import sys
import io
import time
import logging
import schedule
from datetime import datetime

# Importa i 3 script
import dazn_epg
import dazn_live_scanner
import dazn_epg_merger

if hasattr(sys.stdout, 'reconfigure'):
    sys.stdout.reconfigure(encoding='utf-8')
if hasattr(sys.stderr, 'reconfigure'):
    sys.stderr.reconfigure(encoding='utf-8')

# Setup logger per il bot
logger = logging.getLogger("dazn_bot")
logger.setLevel(logging.INFO)

def download_daily_epg():
    logger.info("=== AVVIO DOWNLOAD GIORNALIERO EPG ===")
    try:
        dazn_epg.download_epg()
        dazn_epg.cleanup_old_files(keep_days=7)
    except Exception as e:
        logger.error(f"Errore durante il download dell'EPG: {e}")

def scan_and_merge():
    logger.info("=== AVVIO SCANSIONE E MERGE ===")
    try:
        # 1. Scansione degli eventi live (OCR)
        events = dazn_live_scanner.scan_live_events()
        
        # 2. Anche se non ci sono eventi, o se ha successo, proviamo il merge
        #    Se restituisce None c'e' stato un errore grave, altrimenti list vuota/piena
        if events is not None:
            dazn_epg_merger.merge_epg()
        else:
            logger.warning("Scansione fallita, salto il merge.")
    except Exception as e:
        logger.error(f"Errore durante scansione/merge: {e}", exc_info=True)

def main():
    print("")
    print("  ============================================")
    print("    DAZN EPG BOT - Automazione Completa")
    print("    - Download EPG: Giornaliero (00:05)")
    print("    - Scansione OCR & Merge: Ogni Minuto")
    print("  ============================================")
    print("")

    # Esecuzione immediata all'avvio per allineare tutto
    logger.info("Esecuzione iniziale forzata...")
    download_daily_epg()
    scan_and_merge()

    # Schedulazione dei task
    schedule.every().day.at("00:05").do(download_daily_epg)
    schedule.every(1).minutes.do(scan_and_merge)

    logger.info("Bot in esecuzione. Schedulazioni attive. Premi Ctrl+C per uscire.\n")

    try:
        while True:
            schedule.run_pending()
            time.sleep(5)  # Sleep breve per controllare i task pendenti
    except KeyboardInterrupt:
        logger.info("\nArresto richiesto dall'utente. Uscita in corso.")

if __name__ == "__main__":
    main()
