import os
import json
from pathlib import Path

# ============================================================
#  CONFIGURAÇÃO
# ============================================================
RAIZ_MUSICAS = r"C:\Users\Gerson Wandermurem\Desktop\Projeto Site\Livros da Camilla\Musicas"
ARQUIVO_JSON = os.path.join(RAIZ_MUSICAS, "musicas.json")

# Extensões de áudio suportadas
EXTENSOES_AUDIO = {
    ".mp3", ".wav", ".ogg", ".aac", ".m4a", 
    ".flac", ".wma", ".opus", ".webm",
    ".mp4", ".m4v"
}

# ============================================================
#  GERAR JSON COM CAMINHOS RELATIVOS
# ============================================================
def gerar_json_musicas():
    musicas_por_pasta = []
    
    # Verifica se a pasta existe
    if not os.path.exists(RAIZ_MUSICAS):
        print(f"❌ Pasta não encontrada: {RAIZ_MUSICAS}")
        return []
    
    # Lista todos os itens
    todos_itens = os.listdir(RAIZ_MUSICAS)
    
    # 1. ARQUIVOS NA RAIZ
    audios_raiz = [
        arq for arq in todos_itens
        if Path(arq).suffix.lower() in EXTENSOES_AUDIO
        and os.path.isfile(os.path.join(RAIZ_MUSICAS, arq))
    ]
    
    if audios_raiz:
        # CAMINHO RELATIVO: apenas "Musicas"
        musicas_por_pasta.append({
            "nome": "Raiz",
            "caminho": "Musicas",  # <--- CAMINHO RELATIVO
            "arquivos": sorted(audios_raiz),
            "total": len(audios_raiz)
        })
    
    # 2. SUBPASTAS
    for item in todos_itens:
        caminho_pasta = os.path.join(RAIZ_MUSICAS, item)
        
        if not os.path.isdir(caminho_pasta):
            continue
        
        try:
            arquivos = os.listdir(caminho_pasta)
        except PermissionError:
            continue
        
        audios = [
            arq for arq in arquivos
            if Path(arq).suffix.lower() in EXTENSOES_AUDIO
        ]
        
        if audios:
            # CAMINHO RELATIVO: "Musicas/nome_da_pasta"
            musicas_por_pasta.append({
                "nome": item,
                "caminho": f"Musicas/{item}",  # <--- CAMINHO RELATIVO
                "arquivos": sorted(audios),
                "total": len(audios)
            })
    
    return musicas_por_pasta

# ============================================================
#  SALVAR JSON
# ============================================================
def salvar_json(dados):
    with open(ARQUIVO_JSON, "w", encoding="utf-8") as f:
        json.dump(dados, f, ensure_ascii=False, indent=2)
    print(f"✅ JSON salvo em: {ARQUIVO_JSON}")

# ============================================================
#  EXECUTAR
# ============================================================
if __name__ == "__main__":
    print("🔍 Escaneando músicas...")
    print(f"📁 Pasta: {RAIZ_MUSICAS}")
    print("-" * 60)
    
    dados = gerar_json_musicas()
    
    if not dados:
        print("⚠️ Nenhum arquivo de áudio encontrado!")
        print("📌 Extensões suportadas:", ", ".join(sorted(EXTENSOES_AUDIO)))
    else:
        for pasta in dados:
            print(f"📂 {pasta['nome']}: {pasta['total']} músicas")
            print(f"   📁 Caminho: {pasta['caminho']}")
            for arquivo in pasta['arquivos']:
                print(f"   🎵 {arquivo}")
    
    salvar_json(dados)
    
    print("\n" + "=" * 60)
    print(f"✅ Total de pastas: {len(dados)}")
    print(f"✅ Total de músicas: {sum(p['total'] for p in dados)}")
    print("✅ Concluído!")