import os
import json
from pathlib import Path

# Use o caminho correto para sua pasta de imagens (a pasta PRINCIPAL,
# onde ficam as pastas raízes — ex: as 5 pastas principais — que por
# sua vez podem ter outras pastas dentro, em qualquer profundidade,
# até chegar nas imagens).
RAIZ = r"C:\Users\Gerson Wandermurem\Desktop\Arquivos do Projeto\Imagens"

# Se quiser usar a outra pasta, descomente a linha abaixo e comente a de cima
# RAIZ = r"C:\Users\Gerson Wandermurem\Desktop\Projeto Site\Livros da Camilla\Imagens"

# O albums.json é salvo dentro da própria pasta raiz, que é onde o
# jogosdasfotos.html espera encontrar (Imagens/albums.json).
SAIDA = os.path.join(RAIZ, "albums.json")

EXTENSOES = {".jpg", ".jpeg", ".png", ".gif", ".webp"}


def eh_imagem(nome_arquivo):
    return Path(nome_arquivo).suffix.lower() in EXTENSOES


def construir_no(pasta):
    """
    Monta recursivamente o "nó" de uma pasta:
    - suas imagens diretas (se tiver)
    - suas subpastas, cada uma virando um nó filho (se tiverem foto
      em algum nível)
    Retorna None se a pasta (e tudo dentro dela) não tiver nenhuma foto.
    """
    pasta = Path(pasta)

    imagens = sorted(
        item.name for item in pasta.iterdir()
        if item.is_file() and eh_imagem(item.name)
    )

    filhos = []
    for item in sorted(pasta.iterdir(), key=lambda p: p.name.lower()):
        if item.is_dir():
            no_filho = construir_no(item)
            if no_filho is not None:
                filhos.append(no_filho)

    if not imagens and not filhos:
        # Pasta vazia (sem foto em nenhum nível dentro dela) -> ignora
        return None

    caminho_relativo = os.path.relpath(pasta, RAIZ).replace("\\", "/")

    return {
        "name": pasta.name,
        "path": caminho_relativo,   # usado pelo jogosdasfotos.html para montar a URL das fotos desta pasta
        "images": imagens,          # fotos direto nesta pasta (pode ser [])
        "children": filhos,         # subpastas (pode ser [])
    }


def contar_fotos(no):
    total = len(no["images"])
    for filho in no["children"]:
        total += contar_fotos(filho)
    return total


def gerar_albums():
    raiz = Path(RAIZ)
    if not raiz.is_dir():
        print(f"❌ Pasta raiz não encontrada: {RAIZ}")
        return

    arvore = []
    # Cada pasta principal (raiz -> "Pasta Raiz 1", "Pasta Raiz 2"...)
    # vira um item na lista de primeiro nível.
    for item in sorted(raiz.iterdir(), key=lambda p: p.name.lower()):
        if item.is_dir():
            no = construir_no(item)
            if no is not None:
                arvore.append(no)
                print(f"[OK] {no['name']} -> {contar_fotos(no)} foto(s) no total")
            else:
                print(f"[--] {item.name} (pasta vazia, ignorada)")

    with open(SAIDA, "w", encoding="utf-8") as f:
        json.dump(arvore, f, ensure_ascii=False, indent=2)

    print(f"\nConcluído: {len(arvore)} pasta(s) principal(is) gerada(s) em:\n{SAIDA}")


if __name__ == "__main__":
    gerar_albums()
