#!/usr/bin/python3

import logging
import xml.etree.ElementTree as ET

from pathlib import Path
from xml.dom import minidom
from dataclasses import dataclass


@dataclass
class JarFileInfo:
    name: str
    adf: str
    href: str


def list_jar_files(directory: Path) -> list[JarFileInfo]:
    jar_files: list[JarFileInfo] = []
    for jar_file_path in directory.glob('*.jar'):
        adf_file_path: Path = jar_file_path.with_suffix('.jad')
        if adf_file_path.exists():
            jar_info: JarFileInfo = JarFileInfo(
                name=jar_file_path.stem,
                adf=str(adf_file_path),
                href=str(jar_file_path)
            )
            jar_files.append(jar_info)
        else:
            print(f'Cannot find "{adf_file_path}" file, skipped.')
    return sorted(jar_files, key=lambda jar: jar.name)


def generate_xml(jar_files: list[JarFileInfo]) -> ET.Element:
    index_element: ET.Element = ET.Element('index')
    for jar_file in jar_files:
        print(f'Add "{jar_file.href}" to index.xml')
        file_element: ET.SubElement = ET.SubElement(index_element, 'file', {
            'name': jar_file.name,
            'adf': jar_file.adf,
            'href': jar_file.href,
            'type': 'jar'
        })
        file_element.text = jar_file.name
    return index_element


def prettify_xml(elem: ET.ElementTree) -> str:
    rough_string: str = ET.tostring(elem, 'utf-8')
    pretty_xml: str = minidom.parseString(rough_string).toprettyxml(indent="  ")
    # Drop XML declaration.
    xml_declaration, *lines = pretty_xml.split('\n')
    return '\n'.join(lines)


def main():
    current_directory: Path = Path('.')
    jar_files: list[JarFileInfo] = list_jar_files(current_directory)
    pretty_xml: str = prettify_xml(generate_xml(jar_files))
    with open('index.xml', 'w') as xml_file:
        xml_file.write(pretty_xml)


if __name__ == '__main__':
    main()
