import json
import time
import pygame
import requests

# -----------------------------
# Step 1: Fetch audio-analysis
# -----------------------------
TRACK_ID = "1QmZBRns8OY4RjfkNiH2YT"
ACCESS_TOKEN = "REDACTED"

url = f"https://api.spotify.com/v1/audio-analysis/{TRACK_ID}"
headers = {"Authorization": f"Bearer {ACCESS_TOKEN}"}

response = requests.get(url, headers=headers)
if response.status_code != 200:
    raise Exception(f"Error {response.status_code}: {response.text}")

analysis = response.json()

# Save JSON
with open(f"{TRACK_ID}_analysis.json", "w") as f:
    json.dump(analysis, f, indent=2)

print(f"Saved audio-analysis to {TRACK_ID}_analysis.json")

# -----------------------------
# Step 2: Prepare beats/events
# -----------------------------
beats = analysis.get("beats", [])
sections = analysis.get("sections", [])
bars = analysis.get("bars", [])

# Sort events by start time for real-time printing
events = []
for b in beats:
    events.append((b["start"], "BEAT"))
for s in sections:
    events.append((s["start"], f"SECTION: {s['confidence']:.2f}"))
for bar in bars:
    events.append((bar["start"], "BAR"))

events.sort(key=lambda x: x[0])

# -----------------------------
# Step 3: Initialize pygame
# -----------------------------
pygame.mixer.init()
pygame.mixer.music.load("Lauv_Enemies.ogg")  # replace with your local file
pygame.mixer.music.play()
start_time = time.time()

# -----------------------------
# Step 4: Real-time printing
# -----------------------------
print("Playing song and printing events...")
event_index = 0
while pygame.mixer.music.get_busy():
    elapsed = time.time() - start_time
    # Print all events that have passed
    while event_index < len(events) and events[event_index][0] <= elapsed:
        timestamp, label = events[event_index]
        print(f"{timestamp:.3f}s -> {label}")
        event_index += 1
    time.sleep(0.005)  # small sleep to reduce CPU usage

print("Playback finished.")
