#!/usr/bin/env python3
"""
Icon-Generator für DocuMentor

Erstellt ein Icon aus einem PNG oder generiert ein Standard-Icon.
Unterstützt Windows (.ico) und verschiedene Größen.

Verwendung:
    python create_icon.py                    # Generiert Standard-Icon
    python create_icon.py source.png         # Konvertiert PNG zu ICO
"""

import sys
from pathlib import Path

try:
    from PIL import Image, ImageDraw, ImageFont
except ImportError:
    print("Fehler: Pillow ist nicht installiert.")
    print("Installation: uv pip install pillow")
    sys.exit(1)


def create_default_icon(output_path: Path):
    """Erstellt ein Standard-Icon mit DocuMentor-Branding."""
    sizes = [256, 128, 64, 48, 32, 16]
    images = []

    for size in sizes:
        # Neues Bild erstellen mit Farbverlauf
        img = Image.new('RGB', (size, size), color='white')
        draw = ImageDraw.Draw(img)

        # Hintergrund: Blau-Verlauf (vereinfacht als solides Blau)
        bg_color = (41, 128, 185)  # Professionelles Blau
        draw.rectangle([0, 0, size, size], fill=bg_color)

        # Dokument-Symbol (vereinfachte Darstellung)
        margin = size // 8
        doc_left = margin
        doc_top = margin
        doc_right = size - margin
        doc_bottom = size - margin

        # Weißes Dokument
        draw.rectangle(
            [doc_left, doc_top, doc_right, doc_bottom],
            fill='white',
            outline=(52, 73, 94),
            width=max(1, size // 64)
        )

        # Ecke umgeknickt (rechts oben)
        fold_size = size // 6
        points = [
            (doc_right - fold_size, doc_top),
            (doc_right, doc_top + fold_size),
            (doc_right - fold_size, doc_top + fold_size),
        ]
        draw.polygon(points, fill=(220, 220, 220), outline=(52, 73, 94))

        # Text-Linien im Dokument (nur bei größeren Icons)
        if size >= 32:
            line_margin = doc_left + size // 12
            line_width = doc_right - doc_left - size // 6
            line_count = min(3, size // 32)
            line_spacing = (doc_bottom - doc_top - fold_size) // (line_count + 2)

            for i in range(line_count):
                y = doc_top + fold_size + line_spacing * (i + 1)
                draw.rectangle(
                    [line_margin, y, line_margin + line_width, y + max(1, size // 128)],
                    fill=(52, 73, 94)
                )

        # "M" für Mentor (nur bei großen Icons)
        if size >= 64:
            try:
                # Versuche System-Font zu verwenden
                font_size = size // 4
                font = ImageFont.truetype("/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf", font_size)
            except:
                # Fallback auf Default-Font
                font = ImageFont.load_default()

            text = "M"
            # Zentrieren (grobe Schätzung)
            bbox = draw.textbbox((0, 0), text, font=font)
            text_width = bbox[2] - bbox[0]
            text_height = bbox[3] - bbox[1]
            text_x = (size - text_width) // 2
            text_y = doc_bottom - text_height - margin // 2

            draw.text((text_x, text_y), text, fill=bg_color, font=font)

        images.append(img)

    # Als ICO speichern
    images[0].save(
        output_path,
        format='ICO',
        sizes=[(img.width, img.height) for img in images],
        append_images=images[1:]
    )
    print(f"✓ Standard-Icon erstellt: {output_path}")


def convert_png_to_ico(source_path: Path, output_path: Path):
    """Konvertiert ein PNG-Bild zu einem Multi-Size ICO."""
    try:
        img = Image.open(source_path)

        # Zu RGBA konvertieren falls nötig
        if img.mode != 'RGBA':
            img = img.convert('RGBA')

        # Verschiedene Größen erstellen
        sizes = [256, 128, 64, 48, 32, 16]
        images = []

        for size in sizes:
            resized = img.resize((size, size), Image.Resampling.LANCZOS)
            images.append(resized)

        # Als ICO speichern
        images[0].save(
            output_path,
            format='ICO',
            sizes=[(img.width, img.height) for img in images],
            append_images=images[1:]
        )
        print(f"✓ Icon erstellt aus {source_path.name}: {output_path}")

    except Exception as e:
        print(f"✗ Fehler beim Konvertieren: {e}")
        sys.exit(1)


def main():
    project_root = Path(__file__).parent
    resources_dir = project_root / "resources"
    resources_dir.mkdir(exist_ok=True)

    output_ico = resources_dir / "icon.ico"

    if len(sys.argv) > 1:
        # PNG zu ICO konvertieren
        source_path = Path(sys.argv[1])
        if not source_path.exists():
            print(f"Fehler: Datei nicht gefunden: {source_path}")
            sys.exit(1)

        convert_png_to_ico(source_path, output_ico)
    else:
        # Standard-Icon generieren
        print("Erstelle Standard-Icon...")
        create_default_icon(output_ico)

    print(f"\nIcon gespeichert: {output_ico}")
    print("Das Icon wird automatisch von PyInstaller und Inno Setup verwendet.")


if __name__ == "__main__":
    main()
