import { requireApiV1Auth } from "@/lib/api-v1/auth";
import { apiJsonOk, toApiErrorResponse } from "@/lib/api-v1/response";
import { approveQuote } from "@/lib/api-v1/services/quotes-service";
import { applyApiRateLimit } from "@/lib/api-v1/rate-limit";
import { ensureUuid } from "@/lib/api-v1/validators";

export async function POST(request: Request, context: { params: Promise<{ id: string }> }) {
  try {
    const { id } = await context.params;
    const quoteId = ensureUuid(id, "invalid_quote_id", "Orcamento invalido.");
    const auth = await requireApiV1Auth(request, "orders.write");
    const rateLimit = applyApiRateLimit(
      request,
      {
        namespace: "api-v1:quotes:approve",
        windowMs: 60_000,
        maxPerIp: 30,
        maxPerUser: 30,
      },
      auth.user.id
    );
    const result = await approveQuote({ supabase: auth.supabase, user: auth.user, quoteId });
    return apiJsonOk(
      {
        order_id: result.orderId,
        notification: result.notification,
      },
      {
      headers: rateLimit.headers,
      }
    );
  } catch (error) {
    return toApiErrorResponse(error);
  }
}
