"use client" import { useState } from "react" import { useRouter } from "next/navigation" import { Zap, CheckCircle2, AlertCircle, ChevronLeft, ChevronRight, Users } from "lucide-react" import { formatCurrency } from "@/lib/utils" function monthLabel(year: number, month: number) { return new Date(year, month, 1).toLocaleDateString("en-US", { month: "long", year: "numeric" }) } export function BulkGenerateForm({ leases }: { leases: any[] }) { const router = useRouter() const now = new Date() const [year, setYear] = useState(now.getFullYear()) const [month, setMonth] = useState(now.getMonth()) const [loading, setLoading] = useState(false) const [result, setResult] = useState<{ created: number; skipped: number; message: string } | null>(null) const [error, setError] = useState("") function prevMonth() { if (month === 0) { setMonth(11); setYear(y => y - 1) } else setMonth(m => m - 1) } function nextMonth() { if (month === 11) { setMonth(0); setYear(y => y + 1) } else setMonth(m => m + 1) } const totalRent = leases.reduce((s, l) => s + Number(l.rent_amount), 0) async function generate() { setLoading(true) setError("") setResult(null) const res = await fetch("/api/rent/generate", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ year, month }), }) const data = await res.json() setLoading(false) if (!res.ok) { setError(data.error ?? "Something went wrong"); return } setResult(data) } return (
{/* Month picker */}

Select Month

{monthLabel(year, month)}
{/* Summary */}

Active Tenants ({leases.length})

{formatCurrency(totalRent)}/mo total

{leases.length === 0 ? (
No active leases found. Add leases first.
) : (
{leases.map((l: any) => (

{l.tenant?.first_name} {l.tenant?.last_name}

{l.property?.name}{l.unit ? ` · Unit ${l.unit.unit_number}` : ""}

{formatCurrency(l.rent_amount)}

))}
)}
{/* Result */} {result && (
0 ? "border-emerald-500/20 bg-emerald-500/5" : "border-amber-500/20 bg-amber-500/5" }`}> 0 ? "text-emerald-400" : "text-amber-400"}`} />

0 ? "text-emerald-400" : "text-amber-400"}`}> {result.message}

{result.skipped > 0 && (

{result.skipped} already existed and were skipped.

)}
)} {error && (

{error}

)} {/* Actions */}
{(result?.created ?? 0) > 0 && ( )}
) }