import { configuracaoDoR2, enderecoParaBaixar } from "@/lib/digitais/r2";

import type { Admin, SalaDoBanco } from "./sala.ts";

export type GravacaoNaTela = { id: string; parte: number; segundos: number | null; url: string; tipo: string | null };

/*
 * As gravações de uma live (uma por vez que quem apresenta entrou e saiu do
 * ar), com endereço para assistir que vale 6 horas.
 */
export async function gravacoesDaSala(admin: Admin, sala: Pick<SalaDoBanco, "id" | "user_id">): Promise<GravacaoNaTela[]> {
  const cfg = configuracaoDoR2();
  if (!cfg) return [];
  const { data } = await admin
    .from("digital_files")
    .select("id,storage_key,nome,mime,meta,status,criado_em")
    .eq("user_id", sala.user_id)
    .eq("status", "pronto")
    .eq("meta->>live", sala.id)
    .order("criado_em", { ascending: true })
    .limit(20);
  return ((data ?? []) as Array<{ id: string; storage_key: string; nome: string; mime: string | null; meta: Record<string, unknown> | null }>).map((linha, i) => ({
    id: linha.id,
    parte: Number(linha.meta?.parte) || i + 1,
    segundos: Number(linha.meta?.segundos) || null,
    tipo: linha.mime,
    url: enderecoParaBaixar(cfg, linha.storage_key, { nome: linha.nome, segundos: 6 * 3600, abrirNoNavegador: true, tipo: linha.mime }),
  }));
}
