#sync_spotify
import spotipy
from spotipy.oauth2 import SpotifyOAuth
import json
import os

# 1. Configurações
SPOTIPY_CLIENT_ID = "73162ec026ad4d1ea8493c1bce0900d3"
SPOTIPY_CLIENT_SECRET = "43dca155cb4b4bc0ba51ba8eeec94b5e"
SPOTIPY_REDIRECT_URI = "https://example.com/callback"
ARQUIVO_DADOS = os.path.expanduser("~/spotify_biblioteca.json")

# Lista de escopos oficiais e validados do Spotify
sp = spotipy.Spotify(auth_manager=SpotifyOAuth(
    client_id=SPOTIPY_CLIENT_ID,
    client_secret=SPOTIPY_CLIENT_SECRET,
    redirect_uri=SPOTIPY_REDIRECT_URI,
    scope="user-library-read playlist-read-private playlist-read-collaborative",
    cache_path=".cache_spotify",
    open_browser=False
))

import spotipy
from spotipy.oauth2 import SpotifyOAuth
import json
import os

SPOTIPY_CLIENT_ID = "SEU_CLIENT_ID"
SPOTIPY_CLIENT_SECRET = "SEU_CLIENT_SECRET"
SPOTIPY_REDIRECT_URI = "https://example.com/callback" 

sp = spotipy.Spotify(auth_manager=SpotifyOAuth(
    client_id=SPOTIPY_CLIENT_ID,
    client_secret=SPOTIPY_CLIENT_SECRET,
    redirect_uri=SPOTIPY_REDIRECT_URI,
    scope="user-library-read playlist-read-private playlist-read-collaborative",
    cache_path=".cache_spotify"
))

debug_impresso = False

def extrair_faixa(item, nova_biblioteca):
    global debug_impresso
    
    # Armadilha: Imprime a primeira música recebida na tela, não importa o que seja!
    if not debug_impresso:
        print(f"\n================ [ SUPER DEBUG ] ================\nO Spotify enviou isto como 'música':\n{json.dumps(item, indent=4)}\n=================================================\n")
        debug_impresso = True
        
    if item is None: return False, "Item totalmente nulo"
    
    track = item.get('track')
    if not track: return False, "Chave 'track' ausente"
        
    uri = track.get('uri', '')
    nome = track.get('name', 'Desconhecido')
    
    if not uri: return False, "Música sem URI"
    if 'spotify:track:' not in uri: return False, "Ignorado (Podcast/Local)"
        
    artistas_lista = track.get('artists', [])
    artistas = " ".join([art.get('name', '') for art in artistas_lista if art and art.get('name')])
    
    chave = f"{nome} {artistas}".lower().strip()
    nova_biblioteca[chave] = uri
    return True, ""

def sincronizar_spotify():
    nova_biblioteca = {}
    
    meu_perfil = sp.current_user()
    if not meu_perfil: return
    meu_id = meu_perfil.get('id')
    print(f"Usuário detectado: {meu_perfil.get('display_name', meu_id)}\n")
    
    print("Sincronizando APENAS Playlists Criadas por Mim...")
    playlists = sp.current_user_playlists(limit=50)
    while playlists:
        for playlist in playlists.get('items', []):
            if not playlist or not playlist.get('owner'): continue
            if playlist['owner'].get('id') != meu_id: continue
                
            nome_playlist = playlist.get('name', 'Playlist Desconhecida')
            print(f" -> Lendo: {nome_playlist}")
            
            try:
                # Requisição natural sem filtros para vermos o que vem
                faixas = sp.playlist_items(playlist.get('id'), limit=50)
                
                total_api = faixas.get('total', 0)
                lidas = 0
                erros = {}
                
                while faixas:
                    for item in faixas.get('items', []):
                        sucesso, motivo = extrair_faixa(item, nova_biblioteca)
                        if sucesso: lidas += 1
                        else: erros[motivo] = erros.get(motivo, 0) + 1
                            
                    faixas = sp.next(faixas) if faixas.get('next') else None
                    
                print(f"    [+] {lidas} de {total_api} faixas salvas.")
                if erros: print(f"    [-] Erros: {erros}")
                
            except Exception as e:
                print(f"    [!] Erro: {e}")
                
        playlists = sp.next(playlists) if playlists.get('next') else None

if __name__ == "__main__":
    sincronizar_spotify()