import { NextResponse } from "next/server"
import { desc, eq } from "drizzle-orm"
import { db } from "@/lib/db"
import { rent_payments } from "@/lib/db/schema"
import { getSessionUser } from "@/lib/session"
import { toCsv } from "@/lib/db/admin-queries"
import { getEffectiveOwnerId } from "@/lib/account"

export async function GET() {
  const user = await getSessionUser()
  if (!user) return NextResponse.json({ error: "Unauthorized" }, { status: 401 })

  const ownerId = await getEffectiveOwnerId(user.id)

  const rows = await db.query.rent_payments.findMany({
    where: eq(rent_payments.user_id, ownerId),
    with: {
      tenant: { columns: { first_name: true, last_name: true, email: true } },
      property: { columns: { name: true } },
      unit: { columns: { unit_number: true } },
    },
    orderBy: desc(rent_payments.due_date),
  })

  const csv = toCsv(
    ["Tenant", "Email", "Property", "Unit", "Amount", "Due Date", "Paid Date", "Status", "Method", "Notes"],
    rows.map((p) => [
      `${p.tenant?.first_name ?? ""} ${p.tenant?.last_name ?? ""}`,
      p.tenant?.email ?? "",
      p.property?.name ?? "",
      p.unit?.unit_number ?? "",
      p.amount ?? 0,
      p.due_date ?? "",
      p.paid_date ?? "",
      p.status ?? "",
      p.payment_method ?? "",
      p.notes ?? "",
    ])
  )

  return new NextResponse(csv, {
    headers: {
      "Content-Type": "text/csv; charset=utf-8",
      "Content-Disposition": 'attachment; filename="rent-payments.csv"',
    },
  })
}
