"use client"; import { useState } from "react"; import { useRouter } from "next/navigation"; import { useQuery } from "@tanstack/react-query"; import { createScenario, listScenarios, archiveScenario, type Scenario, type ScenarioInputPayload, } from "@/lib/api"; import { Button } from "@/components/ui/button"; import { ScenarioWizard } from "@/components/ScenarioWizard"; function StatusBadge({ status }: { status: string }) { const styles: Record = { success: "bg-green-100 text-green-700", failed: "bg-red-100 text-red-700", running: "bg-blue-100 text-blue-700", queued: "bg-yellow-100 text-yellow-700", }; return ( {status} ); } function ScenarioRow({ scenario, onArchive, }: { scenario: Scenario; onArchive: (id: string) => void; }) { const router = useRouter(); const kpis = scenario.kpis_json ? (() => { try { return JSON.parse(scenario.kpis_json) as Record; } catch { return null; } })() : null; const tariff = kpis?.solved_tariff_inr_per_kwh; const irr = kpis?.equity_irr; return ( router.push(`/scenarios/${scenario.id}`)} > {scenario.name} {tariff != null ? `₹${tariff.toFixed(2)}/kWh` : "—"} {irr != null ? `${(irr * 100).toFixed(1)}%` : "—"} {new Date(scenario.created_at).toLocaleString()} e.stopPropagation()} > ); } export default function HomePage() { const router = useRouter(); const [showWizard, setShowWizard] = useState(false); const { data: scenarios, refetch } = useQuery({ queryKey: ["scenarios"], queryFn: listScenarios, refetchInterval: 5000, }); async function handleWizardSubmit( name: string, inputs: ScenarioInputPayload, ) { const scenario = await createScenario(name, inputs); await refetch(); router.push(`/scenarios/${scenario.id}`); } async function handleArchive(id: string) { await archiveScenario(id); await refetch(); } if (showWizard) { return (
setShowWizard(false)} />
); } return (

REmodel

Hybrid RE project finance — Solar + Wind + BESS

{!scenarios || scenarios.length === 0 ? (
No scenarios yet — click “New Scenario” to start.
) : (
{scenarios.map((s) => ( ))}
Name Status Tariff Equity IRR Created
)}
); }