#!/usr/bin/env python3
"""
Kodi repozitář – generátor addons.xml
Spusť po nahrání nového ZIP addonu:
  python3 update_repo.py
"""

import xml.etree.ElementTree as ET
import hashlib
import zipfile
import os

REPO_DIR = '/var/www/sites/repo.wizion.cz/www/kodi'

ADDON_DIRS = [
    'repository.michalz',
    'script.sc.downloader',
]


def get_latest_zip(addon_dir):
    """Vrátí nejnovější ZIP soubor ve složce addonu."""
    path = os.path.join(REPO_DIR, addon_dir)
    zips = sorted([f for f in os.listdir(path) if f.endswith('.zip')])
    if not zips:
        raise FileNotFoundError(f'Žádný ZIP nenalezen v {path}')
    return os.path.join(path, zips[-1])


def get_addon_xml(zip_path):
    """Načte addon.xml z ZIP souboru."""
    with zipfile.ZipFile(zip_path) as z:
        xml_files = [f for f in z.namelist() if f.endswith('addon.xml')]
        if not xml_files:
            raise FileNotFoundError(f'addon.xml nenalezen v {zip_path}')
        with z.open(xml_files[0]) as f:
            return ET.parse(f).getroot()


def generate():
    root = ET.Element('addons')

    for addon_dir in ADDON_DIRS:
        try:
            zip_path = get_latest_zip(addon_dir)
            addon_elem = get_addon_xml(zip_path)
            root.append(addon_elem)
            print(f'✓ {addon_dir} ({os.path.basename(zip_path)})')
        except Exception as e:
            print(f'✗ {addon_dir}: {e}')

    # Zapiš addons.xml
    addons_xml_path = os.path.join(REPO_DIR, 'addons.xml')
    tree = ET.ElementTree(root)
    ET.indent(tree, space='  ')
    tree.write(addons_xml_path, encoding='UTF-8', xml_declaration=True)

    # Vygeneruj MD5
    with open(addons_xml_path, 'rb') as f:
        md5 = hashlib.md5(f.read()).hexdigest()
    with open(os.path.join(REPO_DIR, 'addons.xml.md5'), 'w') as f:
        f.write(md5)

    print(f'\naddons.xml vygenerován')
    print(f'MD5: {md5}')


if __name__ == '__main__':
    generate()
