import os
import re
import requests
from urllib.parse import urlparse
from pathlib import Path

def sanitize_filename(name):
    return re.sub(r'[\\/*?:"<>|]', '_', name)

def download_logo(url, name, output_dir):
    try:
        response = requests.get(url, timeout=10)
        response.raise_for_status()

        parsed = urlparse(url)
        ext = os.path.splitext(parsed.path)[1] or '.png'  # Default to .png
        filename = f"{sanitize_filename(name)}{ext}"

        output_path = os.path.join(output_dir, filename)
        with open(output_path, 'wb') as f:
            f.write(response.content)

        print(f"Downloaded: {filename}")
    except Exception as e:
        print(f"Failed to download logo for '{name}': {e}")

def parse_m3u(file_path):
    logos = []
    with open(file_path, 'r', encoding='utf-8') as f:
        for line in f:
            if line.startswith('#EXTINF'):
                name_match = re.search(r',(.+)', line)
                logo_match = re.search(r'tvg-logo="([^"]+)"', line)
                if name_match and logo_match:
                    name = name_match.group(1).strip()
                    logo_url = logo_match.group(1).strip()
                    logos.append((name, logo_url))
    return logos

def main(m3u_file, output_dir='logos'):
    os.makedirs(output_dir, exist_ok=True)
    logo_list = parse_m3u(m3u_file)
    print(f"Found {len(logo_list)} logos to download.")
    
    for name, url in logo_list:
        download_logo(url, name, output_dir)

if __name__ == '__main__':
    import argparse

    parser = argparse.ArgumentParser(description="Download logos from M3U Plus file.")
    parser.add_argument('m3u_file', help='Path to the M3U Plus file')
    parser.add_argument('--output-dir', default='logos', help='Directory to save logos')
    args = parser.parse_args()

    main(args.m3u_file, args.output_dir)

