
import { NextResponse } from "next/server";
import { createAdminClient, createClient } from "@/lib/supabase-server";
import { canCompany, getCompanyContext } from "@/lib/company-context";
import { updateProductCost } from "@/lib/production/update-product-cost";

async function getAuth() {
  const supabase = await createClient();
  const {
    data: { user },
  } = await supabase.auth.getUser();
  return { supabase, user };
}

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

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

  const body = await req.json();
  const adminSupabase = createAdminClient();

  const { data, error } = await adminSupabase
    .from("product_processes")
    .insert({
      ...body,
      user_id: ctx.companyId, // Ensure correct tenant ID
    })
    .select()
    .single();

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

  // Update product cost asynchronously
  if (data?.product_id) {
    updateProductCost(data.product_id).catch(err => console.error("Error updating product cost:", err));
  }

  return NextResponse.json(data);
}

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

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

  const { searchParams } = new URL(req.url);
  const id = searchParams.get("id");

  if (!id) return NextResponse.json({ error: "ID required" }, { status: 400 });

  const adminSupabase = createAdminClient();

  // Get product_id before deleting
  const { data: existing, error: fetchError } = await adminSupabase
    .from("product_processes")
    .select("product_id")
    .eq("id", id)
    .single();

  if (fetchError || !existing) return NextResponse.json({ error: "Processo não encontrado." }, { status: 404 });

  const { error } = await adminSupabase
    .from("product_processes")
    .delete()
    .eq("id", id);

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

  // Update product cost asynchronously
  if (existing?.product_id) {
    updateProductCost(existing.product_id).catch(err => console.error("Error updating product cost:", err));
  }

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