#!/usr/bin/env python3
"""
Genera una galeria navegable en HTML puro - sin CSS, sin JavaScript.
Una pagina HTML por imagen, con links anterior / siguiente / indice.
Funciona en cualquier navegador incluyendo lynx, w3m, links.

Uso:
    python3 generar_galeria.py /ruta/carpeta/fotos
"""

import sys
from pathlib import Path

EXT_OK = {".jpg", ".jpeg", ".png", ".gif", ".webp", ".avif", ".bmp"}

def main():
    if len(sys.argv) < 2:
        print("Uso: python3 generar_galeria.py <carpeta>")
        sys.exit(1)

    carpeta = Path(sys.argv[1]).resolve()
    if not carpeta.exists():
        print("No existe: " + str(carpeta))
        sys.exit(1)

    fotos = sorted(
        p for p in carpeta.iterdir()
        if p.suffix.lower() in EXT_OK
        and not p.name.startswith("thumb-")
        and not p.name.startswith("thumb_")
    )

    if not fotos:
        print("No hay imagenes en " + str(carpeta))
        sys.exit(1)

    n = len(fotos)
    print("Imagenes encontradas: " + str(n))

    salida = carpeta / "galeria"
    salida.mkdir(exist_ok=True)

    paginas = [foto.name + ".html" for foto in fotos]

    # Una pagina por imagen
    for i, foto in enumerate(fotos):
        num       = i + 1
        prev_link = paginas[i - 1] if i > 0     else paginas[-1]
        next_link = paginas[i + 1] if i < n - 1 else paginas[0]
        prev_nom  = fotos[i - 1].name if i > 0     else fotos[-1].name
        next_nom  = fotos[i + 1].name if i < n - 1 else fotos[0].name
        ruta_img  = "../" + foto.name

        L = []
        L.append("<!DOCTYPE html>")
        L.append("<html>")
        L.append("<head><meta charset='UTF-8'>")
        L.append("<title>" + foto.name + " (" + str(num) + "/" + str(n) + ")</title>")
        L.append("</head>")
        L.append("<body>")
        L.append("<p>")
        L.append("  <a href='index.html'>[indice]</a>")
        L.append("  &nbsp;&nbsp;")
        L.append("  <a href='" + prev_link + "'>&lt; anterior</a>")
        L.append("  &nbsp;&nbsp;")
        L.append("  " + str(num) + " / " + str(n))
        L.append("  &nbsp;&nbsp;")
        L.append("  <a href='" + next_link + "'>siguiente &gt;</a>")
        L.append("</p>")
        L.append("<hr>")
        L.append("<p><b>" + foto.name + "</b></p>")
        L.append("<p><img src='" + ruta_img + "' alt='" + foto.name + "' width='100%'></p>")
        L.append("<hr>")
        L.append("<p>")
        L.append("  <a href='index.html'>[indice]</a>")
        L.append("  &nbsp;&nbsp;")
        L.append("  <a href='" + prev_link + "'>&lt; " + prev_nom + "</a>")
        L.append("  &nbsp;&nbsp;")
        L.append("  <a href='" + next_link + "'>" + next_nom + " &gt;</a>")
        L.append("</p>")
        L.append("</body>")
        L.append("</html>")

        (salida / paginas[i]).write_text("\n".join(L), encoding="utf-8")

    # Indice: primera imagen arriba, luego lista completa
    I = []
    I.append("<!DOCTYPE html>")
    I.append("<html>")
    I.append("<head><meta charset='UTF-8'><title>Indice (" + str(n) + " fotos)</title></head>")
    I.append("<body>")
    I.append("<h1>Indice - " + str(n) + " fotos</h1>")
    I.append("<p><a href='" + paginas[0] + "'>")
    I.append("  <img src='../" + fotos[0].name + "' alt='" + fotos[0].name + "' width='100%'>")
    I.append("</a></p>")
    I.append("<p><a href='" + paginas[0] + "'>Ver galeria &gt;</a></p>")
    I.append("<hr>")
    I.append("<ol>")
    for i, foto in enumerate(fotos):
        I.append("  <li><a href='" + paginas[i] + "'>" + foto.name + "</a></li>")
    I.append("</ol>")
    I.append("</body>")
    I.append("</html>")

    (salida / "index.html").write_text("\n".join(I), encoding="utf-8")

    print("Galeria generada en: " + str(salida))
    print("Punto de entrada:    " + str(salida / "index.html"))

if __name__ == "__main__":
    main()