import { NextResponse } from "next/server";
import { query } from "@/lib/db/postgres";
import { parseRecurringPatch } from "@/lib/finance/api-validation";
import { RECURRING_COLUMNS, UUID_RE, badRequest, financeAuth, readJson, serverError, setClause, unauthorized } from "@/lib/finance/api-server";

// Kein DELETE: ein Abo wird per { "is_active": false } beendet (Entscheidung Maro, 2026-10-12).
export async function PATCH(req: Request, context: { params: Promise<{ id: string }> }) {
  const userId = await financeAuth(req, "write");
  if (!userId) return unauthorized();
  const { id } = await context.params;
  if (!UUID_RE.test(id)) return NextResponse.json({ error: "Recurring item not found" }, { status: 404 });

  const parsed = parseRecurringPatch(await readJson(req));
  if (!parsed.ok) return badRequest(parsed.error);
  const set = setClause(parsed.value, 3);

  try {
    const { rows } = await query(
      `UPDATE finance_recurring_items SET ${set.text} WHERE id = $1 AND user_id = $2 RETURNING ${RECURRING_COLUMNS}`,
      [id, userId, ...(set.values as (string | number | boolean)[])]
    );
    if (!rows[0]) return NextResponse.json({ error: "Recurring item not found" }, { status: 404 });
    return NextResponse.json({ recurring: rows[0] });
  } catch (error) {
    return serverError("Finance recurring PATCH error", error);
  }
}
