import os
import glob
import json

from typing import List

from suno_utils.utils.text import (
    write_jsonl,
    read_jsonl,
    write_json,
    read_json,
    normalize_whitespace,
)


def find_all_audio_files(audio_dir: str, exts: List[str] = ["wav"]):
    # find all audio files
    filepaths = []
    for ext in exts:
        filepaths += glob.glob(
            os.path.join(audio_dir, "**", f"*.{ext}"), recursive=True
        )
    return filepaths


if __name__ == "__main__":

    SCORE_THRESHOLD = -0.5
    METAS_DIR = (
        "/home/christian/code/christian/outputs/quality_metas/audio_2ch_48khz_lg/train"
    )

    metas_filepaths = glob.glob(os.path.join(METAS_DIR, "*.jsonl"))
    audio_filepaths = []

    total_num_metas = 0
    for metas_filepath in metas_filepaths:
        # load info from metas jsonl
        metas = read_jsonl(metas_filepath)
        num_metas = len(metas)
        subset_audio_filepaths = []

        for meta in metas:
            # check the audio quality
            score = float(meta["audio_quality"]["score"])
            if score > SCORE_THRESHOLD:
                subset_audio_filepaths.append(meta["audio_file"])

        audio_filepaths.extend(subset_audio_filepaths)
        total_num_metas += num_metas

        keep_percent = (len(subset_audio_filepaths) / num_metas) * 100
        print(f"{os.path.basename(metas_filepath)}: {keep_percent:.2f}%")

    total_keep_percent = (len(audio_filepaths) / total_num_metas) * 100
    print(
        f"Total: {len(audio_filepaths)}/{total_num_metas} ({total_keep_percent:.2f}%)"
    )
