#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"
# Caminho do arquivo onde a biblioteca será salva (diretório home do seu usuário)
ARQUIVO_DADOS = os.path.expanduser("~/spotify_biblioteca.json")

# Escopo atualizado para incluir listas colaborativas
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
))



def sincronizar_spotify():
    nova_biblioteca = {}
    
    print("Sincronizando Músicas Curtidas...")
    resultados = sp.current_user_saved_tracks(limit=50)
    while resultados:
        for item in resultados['items']:
            track = item.get('track')
            if track and track.get('uri'):
                nome = track['name']
                artista = track['artists'][0]['name'] if track['artists'] else ""
                chave = f"{nome} {artista}".lower()
                nova_biblioteca[chave] = track['uri']
        resultados = sp.next(resultados) if resultados['next'] else None

    print("Sincronizando Playlists...")
    playlists = sp.current_user_playlists(limit=50)
    while playlists:
        for playlist in playlists['items']:
            nome_playlist = playlist.get('name', 'Playlist Desconhecida')
            print(f" -> Lendo: {nome_playlist}")
            
            # Bloco de proteção: se der erro em uma playlist, ele pula para a próxima
            try:
                faixas = sp.playlist_items(playlist['id'], limit=50)
                while faixas:
                    for item in faixas['items']:
                        track = item.get('track')
                        if track and track.get('uri') and 'spotify:track:' in track.get('uri'):
                            nome = track['name']
                            artista = track['artists'][0]['name'] if track['artists'] else ""
                            chave = f"{nome} {artista}".lower()
                            nova_biblioteca[chave] = track['uri']
                    faixas = sp.next(faixas) if faixas['next'] else None
            except Exception as e:
                print(f"    [!] Ignorando '{nome_playlist}': Acesso negado pelo Spotify.")
                continue # Pula para a próxima playlist
                
        playlists = sp.next(playlists) if playlists['next'] else None
        
    with open(ARQUIVO_DADOS, 'w', encoding='utf-8') as f:
        json.dump(nova_biblioteca, f, ensure_ascii=False, indent=4)
        
    print(f"\nSucesso! {len(nova_biblioteca)} músicas salvas em {ARQUIVO_DADOS}.")

if __name__ == "__main__":
    sincronizar_spotify()