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

// Wiederkehrende Posten (Abos, Fixkosten, regelmäßige Einnahmen)
// GET /api/v1/finances/recurring?active=true|false
export async function GET(req: Request) {
  const userId = await financeAuth(req, "read");
  if (!userId) return unauthorized();

  const active = new URL(req.url).searchParams.get("active");
  if (active && active !== "true" && active !== "false") return badRequest("active must be true or false");

  try {
    const { rows } = active
      ? await query(
          `SELECT ${RECURRING_COLUMNS} FROM finance_recurring_items WHERE user_id = $1 AND is_active = $2 ORDER BY next_due_date, title`,
          [userId, active === "true"]
        )
      : await query(
          `SELECT ${RECURRING_COLUMNS} FROM finance_recurring_items WHERE user_id = $1 ORDER BY is_active DESC, next_due_date, title`,
          [userId]
        );
    return NextResponse.json({ recurring: rows });
  } catch (error) {
    return serverError("Finance recurring GET error", error);
  }
}

export async function POST(req: Request) {
  const userId = await financeAuth(req, "write");
  if (!userId) return unauthorized();

  const parsed = parseRecurringCreate(await readJson(req), todayIso());
  if (!parsed.ok) return badRequest(parsed.error);
  const r = parsed.value;

  try {
    const { rows } = await query(
      `INSERT INTO finance_recurring_items
         (user_id, type, title, category, amount_cents, currency, frequency, next_due_date, is_active, source)
       VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, 'api')
       RETURNING ${RECURRING_COLUMNS}`,
      [userId, r.type, r.title, r.category, r.amount_cents, r.currency, r.frequency, r.next_due_date, r.is_active]
    );
    return NextResponse.json({ recurring: rows[0] }, { status: 201 });
  } catch (error) {
    return serverError("Finance recurring POST error", error);
  }
}
