# -*- coding: utf-8 -*-

import json
import requests
import logging

# Configurazione
API_TOKEN = 'wRtdAkCkmoCFbuuU5iSVQdt0'
PANEL_BASE_URL = 'http://95.141.32.19:8485'

# Dizionario delle squadre e prefissi stream
TEAMS_STREAMS = {
    "DAZN": "DAZN",
    "Milan TV": "Milan TV",
}

def read_json_file(filename="dazneventlineari.json"):
    try:
        with open(filename, 'r') as file:
            return json.load(file)
    except FileNotFoundError:
        logging.error(f"Errore: Il file {filename} non esiste.")
        return []
    except json.JSONDecodeError as e:
        logging.error(f"Errore nella decodifica del file JSON: {e}")
        return []

def update_headers(channel):
    # Estrae il titolo dell'evento e la competizione
    event_title = channel.get("Name", "")
    competition = channel.get("Competizione", "")

    # Filtra solo per "Serie A Enilive"
    if competition != "Serie A Enilive":
        logging.info(f"Ignoro l'evento: {event_title} (Competizione: {competition})")
        return

    # Estrae i dati del CDN token dal JSON
    cdn_token_name = str(channel.get("cdn_token_name", "")).strip()
    cdn_token = str(channel.get("cdn_token", "")).strip()
    if not cdn_token_name or not cdn_token:
        logging.warning(f"Token CDN mancante per l'evento: {event_title}")
        return

    # Prepara il payload per aggiornare gli header
    payload = {
        "headers": f"{cdn_token_name}: {cdn_token}"
    }

    # Configura gli header per l'autenticazione
    headers = {
        'Authorization': f'Token {API_TOKEN}',
        'Content-Type': 'application/json'
    }

    # Cerca tutte le squadre presenti nel titolo dell'evento
    teams_in_event = [team for team in TEAMS_STREAMS if team in event_title.split()]
    if not teams_in_event:
        logging.info(f"Nessuna squadra trovata nell'evento: {event_title}")
        return

    # Per ogni squadra trovata, aggiorna gli header per ogni qualità
    for team in teams_in_event:
        stream_prefix = TEAMS_STREAMS[team]
        for quality in ["FHD", "HD", "SD"]:
            stream_name = f"{stream_prefix} {quality}"
            update_url = f"{PANEL_BASE_URL}/api/stream/{stream_name}/update-with-restart"
            logging.info(f"Aggiornamento headers per {stream_name} con payload: {payload}")
            response = requests.post(update_url, json=payload, headers=headers)
            if response.status_code == 200:
                logging.info(f"? Headers aggiornati per {stream_name}")
            else:
                logging.error(f"? Errore aggiornamento headers per {stream_name}. Status: {response.status_code}, Response: {response.text}")

def main():
    logging.basicConfig(level=logging.INFO)
    channels_data = read_json_file("daznevent.json")
    if not channels_data:
        logging.error("? Nessun canale trovato nel JSON. Interruzione.")
        return

    for channel in channels_data:
        update_headers(channel)

if __name__ == "__main__":
    main()
