import { NextResponse } from "next/server";
import { createClient } from "@/lib/supabase-server";
import { canCompany, getCompanyContext } from "@/lib/company-context";

export const runtime = "nodejs";

const COLUMN_NAME = "whatsapp_templates";

function isMissingColumnError(error: unknown) {
  if (!error || typeof error !== "object") return false;
  const message =
    typeof (error as { message?: unknown }).message === "string"
      ? ((error as { message?: string }).message || "").toLowerCase()
      : "";
  return message.includes(COLUMN_NAME.toLowerCase());
}

export async function GET() {
  const supabase = await createClient();
  const {
    data: { user },
  } = await supabase.auth.getUser();
  if (!user) return NextResponse.json({ error: "Não autenticado." }, { status: 401 });

  const ctx = await getCompanyContext(supabase, user);
  if (!canCompany(ctx, user.id, "whatsapp.manage")) {
    return NextResponse.json({ error: "Sem permissão." }, { status: 403 });
  }

  const profileId = ctx.ownerId || user.id;

  const { data, error } = await supabase
    .from("profiles")
    .select(COLUMN_NAME)
    .eq("id", profileId)
    .maybeSingle();

  if (error) {
    if (isMissingColumnError(error)) {
      return NextResponse.json({ templates: null });
    }
    return NextResponse.json({ error: error.message }, { status: 400 });
  }

  const raw = (data as Record<string, unknown> | null)?.[COLUMN_NAME] ?? null;
  return NextResponse.json({ templates: raw });
}

export async function POST(req: Request) {
  const supabase = await createClient();
  const {
    data: { user },
  } = await supabase.auth.getUser();
  if (!user) return NextResponse.json({ error: "Não autenticado." }, { status: 401 });

  const ctx = await getCompanyContext(supabase, user);
  if (!canCompany(ctx, user.id, "whatsapp.manage")) {
    return NextResponse.json({ error: "Sem permissão." }, { status: 403 });
  }

  const profileId = ctx.ownerId || user.id;

  const body = (await req.json().catch(() => null)) as Record<string, unknown> | null;
  if (!body || typeof body.templates !== "object") {
    return NextResponse.json({ error: "Campo 'templates' é obrigatório." }, { status: 400 });
  }

  const { error } = await supabase
    .from("profiles")
    .update({ [COLUMN_NAME]: body.templates })
    .eq("id", profileId);

  if (error) {
    if (isMissingColumnError(error)) {
      return NextResponse.json({
        ok: true,
        warning: "Coluna whatsapp_templates não existe na tabela profiles. Crie-a como JSONB nullable.",
      });
    }
    return NextResponse.json({ error: error.message }, { status: 400 });
  }

  return NextResponse.json({ ok: true });
}
