import requests
import json
import xml.etree.ElementTree as ET
from datetime import datetime
from xml.dom import minidom

URL = "https://sledovanitv.cz/playback/epg-playing?playlist=1"
OUTPUT = "/opt/epg/sledovani.xml"

# Stiahnutie JSON
r = requests.get(URL, timeout=30)
r.raise_for_status()

data = r.json()

# XMLTV
tv = ET.Element("tv")
tv.set("generator-info-name", "SledovaniTV EPG")

channels = 0
programmes = 0

for channel_id, event in data.items():

    # CHANNEL
    channel = ET.SubElement(tv, "channel")
    channel.set("id", channel_id)

    name = ET.SubElement(channel, "display-name")
    name.text = channel_id

    # PROGRAM
    if not isinstance(event, dict):
        continue

    title = event.get("title")
    start = event.get("startTime")
    end = event.get("endTime")

    if not title or not start or not end:
        continue

    try:
        start_dt = datetime.fromisoformat(start)
        end_dt = datetime.fromisoformat(end)

        # XMLTV: YYYYMMDDHHMMSS +0200
        start_xml = start_dt.strftime("%Y%m%d%H%M%S %z")
        end_xml = end_dt.strftime("%Y%m%d%H%M%S %z")

    except Exception as e:
        print(f"Chyba času {channel_id}: {e}")
        continue

    programme = ET.SubElement(tv, "programme")
    programme.set("start", start_xml)
    programme.set("stop", end_xml)
    programme.set("channel", channel_id)

    title_element = ET.SubElement(programme, "title")
    title_element.set("lang", "cs")
    title_element.text = title

    channels += 1
    programmes += 1


# Pekné XML
xml_data = ET.tostring(tv, encoding="utf-8")

pretty = minidom.parseString(xml_data).toprettyxml(
    indent="    ",
    encoding="UTF-8"
)

with open(OUTPUT, "wb") as f:
    f.write(pretty)

print()
print(f"Hotovo.")
print(f"Kanály: {channels}")
print(f"Programy: {programmes}")
print(f"Výstup: {OUTPUT}")
