"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 (
Select Month
Active Tenants ({leases.length})
{formatCurrency(totalRent)}/mo total
{l.tenant?.first_name} {l.tenant?.last_name}
{l.property?.name}{l.unit ? ` · Unit ${l.unit.unit_number}` : ""}
{formatCurrency(l.rent_amount)}
0 ? "text-emerald-400" : "text-amber-400"}`}> {result.message}
{result.skipped > 0 && ({result.skipped} already existed and were skipped.
)}{error}