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

URL = "https://tnlive.sk/api/v1/tnlive/program?channel_id=48"
OUTPUT = "/opt/epg/tnMarkiza.xml"

CHANNEL_ID = "TN.Live"
CHANNEL_NAME = "TN Live"

CHANNEL_LOGO = (
    "https://cmesk-ott-images-tvnoviny.ssl.cdn.cra.cz/"
    "1612ed54-2b03-4982-a141-884afa873a80.webp"
)


# -----------------------------------------
# STIAHNUTIE JSON
# -----------------------------------------

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

data = r.json()

# API vracia:
# {
#     "currentProgram": {...},
#     "program": [...]
# }

programs = data.get("program", [])

if not isinstance(programs, list):
    raise Exception("API položka 'program' nie je zoznam.")


# -----------------------------------------
# XMLTV
# -----------------------------------------

tv = ET.Element("tv")
tv.set("generator-info-name", "TNLive EPG")


# -----------------------------------------
# CHANNEL
# -----------------------------------------

channel = ET.SubElement(tv, "channel")
channel.set("id", CHANNEL_ID)

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

icon = ET.SubElement(channel, "icon")
icon.set("src", CHANNEL_LOGO)


# -----------------------------------------
# PROGRAMY
# -----------------------------------------

programme_count = 0

for event in programs:

    if not isinstance(event, dict):
        continue

    title = event.get("title")
    start = event.get("timeFrom")
    end = event.get("timeTo")

    if not title or not start or not end:
        continue

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

        # Preskočiť neplatný alebo nulový program
        if end_dt <= start_dt:
           print(f"Preskakujem neplatný program: {title}")
           continue

        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: {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", "sk")
    title_element.text = title

    programme_count += 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("===================================")
print("TN LIVE EPG HOTOVÉ")
print("===================================")
print(f"Kanály:   1")
print(f"Programy: {programme_count}")
print(f"Výstup:   {OUTPUT}")
print("===================================")