from pathlib import Path
import re
import unicodedata

# ==========================================
# CID + NÁZVY KANÁLOV
# ==========================================

channels = {
    "3787": "Mega Hit HD (3787) SK",
    "3583": "Worldwide Hits HD (3583) SK",
    "2981": "Top Movies HD (2981) SK",
    "952": "Markiza HD (952) SK",
    "954": "Doma HD (954) SK",
    "814": "Joj HD (814) SK",
    "847": "Jednotka HD (847) SK",
    "848": "Dvojka HD (848) SK",
    "2488": "Travel Adventures HD (2488) SK",
    "3257": "The World Inside Out HD (3257) SK",
    "3399": "Smurfs HD (3399) SK",
    "3599": "Paw Patrol HD (3599) SK",
    "955": "Dajto HD (955) SK",
    "816": "Joj Plus HD (816) SK",
    "953": "Markiza Krimi HD (953) SK",
    "818": "Wau HD (818) SK",
    "3825": "Premium Action HD (3825) SK",
    "3829": "Premium Comedy HD (3829) SK",
    "3833": "Premium Thriller HD (3833) SK",
    "3831": "Premium Drama HD (3831) SK",
    "3828": "Premiere HD (3828) SK",
    "813": "Joj Cinema HD (813) SK",
    "2088": "Markiza Klasik HD (2088) SK",
    "755": "Prima Plus HD (755) SK",
    "3315": "Saving Hope HD (3315) SK",
    "3642": "Money Games HD (3642) SK",
    "758": "Ta3 HD (758) SK",
    "961": "Joj 24 HD (961) SK",
    "849": "24 HD (849) SK",
    "817": "Joj Sport HD (817) SK",
    "2675": "Joj Sport 2 HD (2675) SK",
    "850": "Sport HD (850) SK",
    "743": "Ct1 HD (743) SK",
    "2396": "Ct2 HD (2396) SK",
    "1": "Nova International HD (1) SK",
    "998": "Amc HD (998) SK",
    "973": "Film HD (973) SK",
    "807": "Axn (807) SK",
    "808": "Axn Black (808) SK",
    "809": "Axn White (809) SK",
    "863": "Prima Cool HD (863) SK",
    "864": "Prima Love HD (864) SK",
    "866": "Prima Krimi HD (866) SK",
    "1364": "Tv Barrandov HD (1364) SK",
    "749": "Kino Barrandov HD (749) SK",
    "741": "Barrandov Krimi HD (741) SK",
    "983": "Sport 1 HD (983) SK",
    "984": "Sport 2 HD (984) SK",
    "513": "Nova Sport 1 HD (513) SK",
    "3": "Nova Sport 2 HD (3) SK",
    "1236": "Eurosport 1 HD (1236) SK",
    "1237": "Eurosport 2 HD (1237) SK",
    "872": "History HD (872) SK",
    "1232": "Discovery Channel HD (1232) SK",
    "1234": "Id Xtra HD (1234) SK",
    "805": "National Geographic HD (805) SK",
    "804": "National Geographic Wild HD (804) SK",
    "994": "Spektrum HD (994) SK",
    "1602": "Joj Svet HD (1602) SK",
    "996": "Viasat Explore HD (996) SK",
    "995": "Viasat History HD (995) SK",
    "997": "Viasat Nature HD (997) SK",
    "815": "Jojko HD (815) SK",
    "1032": "Disney Channel (1032) SK",
    "1224": "Lala Tv HD (1224) SK",
    "1348": "Cartoon Network HD (1348) SK",
    "1238": "Cartoonito HD (1238) SK",
    "982": "Minimax (982) SK",
    "3578": "Adventure Caleidoscope HD (3578) SK",
    "2006": "Action Zone HD (2006) SK",
    "3824": "Action Plus HD (3824) SK",
    "2007": "Comedy Universe HD (2007) SK",
    "3775": "Romance HD (3775) SK",
    "3830": "Crime Tv HD (3830) SK",
    "819": "Cs Film Cs Horror (819) SK",
    "845": "Cs Horror (845) SK",
    "821": "Cs Mystery (821) SK",
    "2005": "Family Fun HD (2005) SK",
    "2008": "Real Drama HD (2008) SK",
    "2009": "Thriller Time HD (2009) SK",
    "3790": "Thriller Plus HD (3790) SK",
    "3826": "Sci Fi Fantasy HD (3826) SK",
    "3479": "Horror Land HD (3479) SK",
    "1000": "Epic Drama HD (1000) SK",
    "3581": "Big Steps HD (3581) SK",
    "956": "Film Europe HD (956) SK",
    "957": "Film Europe HD (957) SK",
    "836": "Auto Motor Und Sport HD (836) SK",
    "1918": "Cars Stars HD (1918) SK",
    "3649": "Trace Sport Stars HD (3649) SK",
    "3784": "World Of Free Sports HD (3784) SK",
    "3098": "Unbeaten Channel HD (3098) SK",
    "3128": "Sport Fishing HD (3128) SK",
    "3009": "Truth About Sports HD (3009) SK",
    "1227": "Animal Planet HD (1227) SK",
    "993": "Spektrum Home (993) SK",
    "1233": "Tlc Balkans HD (1233) SK",
    "1230": "Travel Channel HD (1230) SK",
    "1235": "Hgtv (1235) SK",
    "1231": "Food Network HD (1231) SK",
    "975": "Paprika Tv (975) SK",
    "2648": "Men With The Pot HD (2648) SK",
    "3319": "Cooking With Byron Talbott HD (3319) SK",
    "2397": "Ct Art HD (2397) SK",
    "1583": "Park Tv HD (1583) SK",
    "1585": "Skvele Tv Uhd (1585) SK",
    "1584": "Skvele Tv HD (1584) SK",
    "820": "Cs History (820) SK",
    "959": "Mnam HD (959) SK",
    "958": "Mnau HD (958) SK",
    "960": "Hobby Tv HD (960) SK",
    "1793": "Tv Doctor HD (1793) SK",
    "2318": "Murder Maps HD (2318) SK",
    "2323": "Political History HD (2323) SK",
    "2331": "Presidents Leaders HD (2331) SK",
    "2322": "Historical Figures HD (2322) SK",
    "3560": "Science And Innovation HD (3560) SK",
    "3605": "Movie Legends HD (3605) SK",
    "2321": "Fashion History HD (2321) SK",
    "3162": "Hollywood Stories HD (3162) SK",
    "2320": "Movie Stars HD (2320) SK",
    "2319": "Video Killed The Radio Star HD (2319) SK",
    "2329": "Monarchies Dynasties HD (2329) SK",
    "2330": "Raiders Of The Lost Art HD (2330) SK",
    "2328": "Legends Of The Opera HD (2328) SK",
    "2338": "World S Personalities HD (2338) SK",
    "2337": "Myths Monsters HD (2337) SK",
    "2659": "Pure Nature HD (2659) SK",
    "2398": "Ct D HD (2398) SK",
    "800": "Disney Junior (800) SK",
    "981": "Jimjam (981) SK",
    "3621": "Undersea Adventures HD (3621) SK",
    "3633": "Toon Town HD (3633) SK",
    "3606": "Ninja Action Channel HD (3606) SK",
    "3517": "Mattel Junior HD (3517) SK",
    "1299": "Duck Tv HD (1299) SK",
    "797": "Baby Tv (797) SK",
    "3443": "Talking Tom Shorts HD (3443) SK",
    "3110": "Cocobi Tv Song HD (3110) SK",
    "3109": "Cocobi Tv Fun Play HD (3109) SK",
    "3591": "Baby Shark Tv HD (3591) SK",
    "3453": "Blip Tv HD (3453) SK",
    "3487": "Magical Smile Tv HD (3487) SK",
    "3474": "Family Entertainment Tv HD (3474) SK",
    "3339": "English Club (3339) SK",
    "2105": "Davinci Explore The World HD (2105) SK",
    "2114": "Da Vinci Operation Ouch HD (2114) SK",
    "2099": "Da Vinci Fun Learning HD (2099) SK",
    "742": "Cnn Prima News HD (742) SK",
    "1528": "Ct24 HD (1528) SK",
    "1563": "A11 HD (1563) SK",
    "1905": "Euronews (1905) SK",
    "1906": "Bbc News HD (1906) SK",
    "3406": "France 24 HD (3406) SK",
    "1360": "France 24 English HD (1360) SK",
    "1323": "Cnn International HD (1323) SK",
    "1909": "Current Time HD (1909) SK",
    "1361": "France 24 Arabic HD (1361) SK",
    "1910": "Trt World HD (1910) SK",
    "1908": "Tvp World HD (1908) SK",
    "840": "Ocko HD (840) SK",
    "841": "Ocko Star HD (841) SK",
    "839": "Ocko Expres HD (839) SK",
    "838": "Ocko Black HD (838) SK",
    "3687": "Trace Urban HD (3687) SK",
    "3715": "Trace Uk HD (3715) SK",
    "3712": "Trace Brasil HD (3712) SK",
    "3684": "Trace Latina HD (3684) SK",
    "2302": "London Live Music HD (2302) SK",
    "2307": "Livepop Concerts HD (2307) SK",
    "1900": "Slager Muzika HD (1900) SK",
    "1901": "Slager Original HD (1901) SK",
    "1902": "Slager Premium HD (1902) SK",
    "2141": "Tv Folklorika HD (2141) SK",
    "875": "Senzi HD (875) SK",
    "1907": "Deluxe Music (1907) SK",
    "1930": "M1 HD (1930) SK",
    "1931": "M2 HD (1931) SK",
    "1932": "M5 HD (1932) SK",
    "1933": "Duna Tv HD (1933) SK",
    "1934": "Duna World HD (1934) SK",
    "1935": "Rtl HD (1935) SK",
    "1940": "Rtl Ketto HD (1940) SK",
    "1936": "Rtl Otthon HD (1936) SK",
    "1937": "Cool Tv HD (1937) SK",
    "1938": "Muzsika Tv (1938) SK",
    "1939": "Sorozat (1939) SK",
    "1801": "Tv Noe HD (1801) SK",
    "1800": "Lux Tv HD (1800) SK",
    "1913": "Aquarium 4K (1913) SK",
    "1914": "Fireplace 4K (1914) SK",
    "2459": "Tv Osem HD (2459) SK",
    "1917": "Freedom HD (1917) SK",
    "1911": "Espreso Tv HD (1911) SK",
    "2350": "Abc Tv HD (2350) SK"
}
# ==========================================
# NASTAVENIE
# ==========================================

BASE = "https://staticeu.sweet.tv/images/v2/icons/channels/v3"
OUTPUT = "/opt/epg/sk.m3u"


# ==========================================
# VYTVORÍ SLUG
# ==========================================

def make_slug(name):
    text = unicodedata.normalize("NFKD", name)
    text = "".join(c for c in text if not unicodedata.combining(c))

    text = text.lower()
    text = text.replace("&", "-and-")
    text = re.sub(r"[^a-z0-9]+", "-", text)
    text = re.sub(r"-+", "-", text)

    return text.strip("-")


# ==========================================
# VYTVORENIE M3U
# ==========================================

Path(OUTPUT).parent.mkdir(parents=True, exist_ok=True)

seen = set()

with open(OUTPUT, "w", encoding="utf-8") as f:

    f.write("#EXTM3U\n")

    for cid, name in channels.items():

        if cid in seen:
            continue

        seen.add(cid)
        
        # odstráni napr. "(3924) UA"

        logo_name = re.sub(r"\s*\(\d+\)\s*[A-Z]{2}$", "", name).strip()

        slug = make_slug(logo_name)

        logo = f"{BASE}/{cid}-{slug}.png"

        f.write(
            f'#EXTINF:-1 cid="{cid}" '
            f'tvg-name="{name}" '
            f'tvg-logo="{logo}" '
            f'group-title="Live",{name}\n'
        )

        print(f"{cid} | {name}")

print()
print("======================================")
print("HOTOVO")
print("======================================")
print(f"Kanály: {len(seen)}")
print(f"Výstup: {OUTPUT}")