# %%
from suno_utils.audio import Audio
import requests
import os

# %%
params = {
    "gen_id": "f62ab88d-0d12-4d31-bc7a-89b36730b6c5",
    "min_loop_length_bars": 2,
    "max_loop_length_bars": 4,
    #"override_target_tempo": 144,
    #"confidence_cutoff": 0.8,
    "output_stems": True,
}

response = requests.get(
    "https://suno-ai--loop-extraction-dev-extract-loop-points.modal.run",
    params=params
)

# %%
response_json = response.json()
gen_id = response_json['gen_id']
loops = response_json['loops']
print(gen_id)
print(f"Found {len(loops)} loops")

# %%
audio_paths = []
response_json = response.json()
for loop, loop_data in response_json["loops"].items():
    bars = loop_data["bar_length"]
    tempo = loop_data["tempo"]
    print(f"{bars} bars, {tempo} bpm")
    if "s3_path" in loop_data:
        parent_loop = loop_data["s3_path"]
        print(f"Parent: {parent_loop}")
        audio_paths.append(parent_loop)
    if "stems" in loop_data:
        stems = loop_data["stems"]
        stem_loudness = loop_data["loudness_metrics"]
        for stem, loudness in zip(stems, stem_loudness):
            if loudness and loudness["peak_db"] > -10:
                print(stem, loudness["peak_db"])
                audio_paths.append(stem)

print(audio_paths)

# %%
audios = [Audio.from_s3(ap) for ap in audio_paths]

for audio in audios:
    audio_loop = Audio.concatenate([audio, audio, audio])
    audio_loop.play()

# %%
output_dir = f"/home/sara/sara/{gen_id}"
os.makedirs(output_dir, exist_ok=True)

for idx, audio in enumerate(audios):
    local_fp = os.path.join(output_dir, f"{idx}.wav")
    audio.write_wav(local_fp)


