import { createAdminClient } from "@/lib/supabase-admin";
import { lembrar } from "@/lib/lembranca";
import { configuracaoDoR2 } from "@/lib/digitais/r2";

/*
  "Compre pelo vídeo" da Boutique: de onde vêm os vídeos.

  A fonte é o recurso que a loja já usa, o vídeo do produto (migration 183,
  memória video-do-produto): `products.video_file_id` aponta para um arquivo
  da própria loja em `digital_files` (categoria "video", status "pronto"),
  servido por /api/catalog/video/<produto>, que confere de novo produto ativo
  e visível e redireciona para o endereço assinado do depósito. É o mesmo
  caminho que a página do produto usa na galeria.

  Só entram vídeos ENVIADOS (arquivo). Link do YouTube/Vimeo fica de fora: o
  card toca sozinho, mudo e em loop, e o player avança quando o vídeo acaba,
  e isso pede um <video> de verdade (seis iframes do YouTube tocando ao mesmo
  tempo travariam o celular).

  Aqui só saem os ids dos produtos, do mais novo para o mais antigo; quem
  decide o que aparece é a página, cruzando com a lista de produtos que a
  loja já mostra para este visitante (produto escondido, esgotado escondido
  e preço escondido pelas regras da loja já vêm resolvidos nela). Fica
  lembrado dois minutos, como o resto da loja (a chave começa pelo slug: o
  aviso do painel apaga junto).
*/

export const TETO_DE_VIDEOS_DA_BOUTIQUE = 12;

type Perfil = { id?: string | null; slug?: string | null };

async function buscar(dono: string): Promise<string[]> {
  if (!configuracaoDoR2()) return [];
  const supabase = createAdminClient();
  const { data: linhas, error } = await supabase
    .from("products")
    .select("id,video_file_id")
    .eq("user_id", dono)
    .eq("active", true)
    .eq("show_in_catalog", true)
    .not("video_file_id", "is", null)
    .order("created_at", { ascending: false })
    .limit(60);
  if (error || !Array.isArray(linhas) || !linhas.length) return [];
  const produtos = linhas as Array<{ id: string; video_file_id: string | null }>;
  const arquivos = Array.from(new Set(produtos.map((p) => String(p.video_file_id || "")).filter(Boolean)));
  const { data: prontos, error: erroDosArquivos } = await supabase
    .from("digital_files")
    .select("id")
    .in("id", arquivos)
    .eq("user_id", dono)
    .eq("status", "pronto")
    .eq("categoria", "video");
  if (erroDosArquivos || !Array.isArray(prontos)) return [];
  const ok = new Set((prontos as Array<{ id: string }>).map((a) => String(a.id)));
  return produtos.filter((p) => ok.has(String(p.video_file_id))).map((p) => String(p.id));
}

/** Os produtos da loja com vídeo enviado e pronto, do mais novo para o mais antigo. */
export async function produtosComVideoDaBoutique(perfil: Perfil): Promise<string[]> {
  const dono = String(perfil?.id || "");
  const slug = String(perfil?.slug || "").toLowerCase();
  if (!dono || !slug) return [];
  try {
    return await lembrar(`${slug}/boutique/videos`, () => buscar(dono));
  } catch {
    /* Sem vídeo o bloco some; a home nunca cai por causa dele. */
    return [];
  }
}

/** O endereço do vídeo de um produto (a mesma rota da galeria do produto). */
export function enderecoDoVideoDaBoutique(produtoId: string) {
  return `/api/catalog/video/${encodeURIComponent(produtoId)}`;
}
