import { NextResponse } from "next/server";

import { conferirChave } from "@/lib/digitais/servidor/acessos";
import { nomeDoCookieDaEntrega } from "@/lib/digitais/servidor/curso";
import { createAdminClient } from "@/lib/supabase-admin";

/*
 * O clique "Assistir" na página do link do e-mail: a chave daquele pedido
 * vira um cookie só HTTP, e o curso abre neste navegador. Um clique de
 * verdade (POST): o robô que abre links de e-mail não entra por ninguém. A
 * chave abre só os cursos daquele pedido, nunca o portal do cliente.
 */
export async function POST(request: Request) {
  const semCache = { headers: { "cache-control": "no-store" } };
  try {
    const corpo = (await request.json().catch(() => null)) as { chave?: unknown; produtoId?: unknown } | null;
    const chave = typeof corpo?.chave === "string" ? corpo.chave : "";
    const produtoId = typeof corpo?.produtoId === "string" ? corpo.produtoId : "";
    if (!chave || !/^[0-9a-f-]{36}$/i.test(produtoId)) return NextResponse.json({ error: "Link inválido." }, { status: 400, ...semCache });

    const admin = createAdminClient();
    const conferida = await conferirChave(admin, chave, "entrega");
    if (!conferida?.orderId) return NextResponse.json({ error: "Este link não vale mais. Entre pela área de membros." }, { status: 401, ...semCache });

    const { data } = await admin
      .from("digital_entitlements")
      .select("id,digital_deliverables!inner(tipo,live_id),products(user_id)")
      .eq("order_id", conferida.orderId)
      .eq("product_id", produtoId)
      .eq("user_id", conferida.lojaId)
      /* A live entra pelo mesmo clique: a chave vira cookie e a sala confere. */
      .in("digital_deliverables.tipo", ["curso", "live"])
      .limit(1);
    if (!(data ?? []).length) return NextResponse.json({ error: "Este conteúdo não é deste pedido." }, { status: 403, ...semCache });
    const entregavel = (data ?? [])[0]?.digital_deliverables as unknown as { tipo?: string; live_id?: string | null } | null;

    const { data: perfil } = await admin.from("profiles").select("slug").eq("id", conferida.lojaId).maybeSingle();
    const slug = String((perfil as { slug?: string | null } | null)?.slug || "");
    const destino =
      entregavel?.tipo === "live" && entregavel.live_id ? `/${slug}/live/${entregavel.live_id}` : `/${slug}/membros/curso/${produtoId}`;
    const resposta = NextResponse.json({ ok: true, destino }, semCache);
    resposta.cookies.set({
      name: nomeDoCookieDaEntrega(conferida.orderId),
      value: chave,
      httpOnly: true,
      secure: process.env.NODE_ENV === "production",
      sameSite: "lax",
      path: "/",
      maxAge: 30 * 24 * 60 * 60,
    });
    return resposta;
  } catch (erro) {
    console.error("[digitais] entrar no curso", erro);
    return NextResponse.json({ error: "Não foi possível abrir o conteúdo agora." }, { status: 500, ...semCache });
  }
}
