import { getMetrics, getModels } from "@/lib/data";
import { LANGUAGES, LanguageMetrics } from "@/lib/types";

export async function GET() {
  const models = await getModels();
  const result: Record<string, Record<string, Record<string, Record<string, number>>>> = {};

  for (const model of models) {
    result[model.id] = {};
    for (const ckpt of model.checkpoints) {
      const metrics = await getMetrics(model.id, ckpt);
      if (!metrics) continue;
      const langMetrics: Record<string, Record<string, number>> = {};
      for (const lang of LANGUAGES) {
        const lm = metrics[lang] as LanguageMetrics | undefined;
        if (lm && typeof lm === "object" && "wer_norm" in lm) {
          langMetrics[lang] = {
            wer_raw: lm.wer_raw,
            wer_norm: lm.wer_norm,
            wer_numcanon: lm.wer_numcanon,
            space_norm_wer: lm.space_norm_wer ?? 0,
            mer: lm.mer ?? 0,
            cer_norm: lm.cer_norm,
            wer_norm_nonum: lm.wer_norm_nonum ?? lm.wer_norm,
            mer_nonum: lm.mer_nonum ?? lm.mer ?? 0,
          };
        }
      }
      langMetrics["__overall__"] = {
        wer_raw: metrics.__overall__?.wer_raw ?? 0,
        wer_norm: metrics.__overall__?.wer_norm ?? 0,
        wer_numcanon: metrics.__overall__?.wer_numcanon ?? 0,
        space_norm_wer: metrics.__overall__?.space_norm_wer ?? 0,
        mer: metrics.__overall__?.mer ?? 0,
        cer_norm: metrics.__overall__?.cer_norm ?? 0,
        wer_norm_nonum: metrics.__overall__?.wer_norm_nonum ?? metrics.__overall__?.wer_norm ?? 0,
        mer_nonum: metrics.__overall__?.mer_nonum ?? metrics.__overall__?.mer ?? 0,
      };
      result[model.id][ckpt] = langMetrics;
    }
  }

  return Response.json(result);
}
