diff --git a/src/app/admin/settings/components/BatteryInvestmentSettings.tsx b/src/app/admin/settings/components/BatteryInvestmentSettings.tsx new file mode 100644 index 0000000..986df42 --- /dev/null +++ b/src/app/admin/settings/components/BatteryInvestmentSettings.tsx @@ -0,0 +1,271 @@ +'use client'; + +import { Plus, X, Save, Battery } from 'lucide-react'; +import type { CompanySettings } from '../page'; + +interface BatteryInvestmentSettingsProps { + settings: CompanySettings; + setSettings: React.Dispatch>; + activeBatteryTab: number; + setActiveBatteryTab: (n: number) => void; + addBatteryPlan: boolean; + setAddBatteryPlan: (v: boolean) => void; + newBatteryName: string; + setNewBatteryName: (v: string) => void; + newBatteryStatus: string; + setNewBatteryStatus: (v: string) => void; + newBatteryTarget: number; + setNewBatteryTarget: (n: number) => void; + newBatteryStart: string; + setNewBatteryStart: (v: string) => void; + newBatteryEnd: string; + setNewBatteryEnd: (v: string) => void; + newBatteryMin: number; + setNewBatteryMin: (n: number) => void; + newBatteryMax: number; + setNewBatteryMax: (n: number) => void; + newBatteryDuration: number; + setNewBatteryDuration: (n: number) => void; + newBatteryLock: number; + setNewBatteryLock: (n: number) => void; + newBatteryPenalty: number; + setNewBatteryPenalty: (n: number) => void; + newBatteryProfitShare: number; + setNewBatteryProfitShare: (n: number) => void; + newBatteryDesc: string; + setNewBatteryDesc: (v: string) => void; + newBatteryBasePrice: number; + setNewBatteryBasePrice: (n: number) => void; + newBatteryMinQuantity: number; + setNewBatteryMinQuantity: (n: number) => void; + createBatteryPlan: () => void; + handleSave: () => void; +} + +export default function BatteryInvestmentSettings({ + settings, setSettings, + activeBatteryTab, setActiveBatteryTab, + addBatteryPlan, setAddBatteryPlan, + newBatteryName, setNewBatteryName, + newBatteryStatus, setNewBatteryStatus, + newBatteryTarget, setNewBatteryTarget, + newBatteryStart, setNewBatteryStart, + newBatteryEnd, setNewBatteryEnd, + newBatteryMin, setNewBatteryMin, + newBatteryMax, setNewBatteryMax, + newBatteryDuration, setNewBatteryDuration, + newBatteryLock, setNewBatteryLock, + newBatteryPenalty, setNewBatteryPenalty, + newBatteryProfitShare, setNewBatteryProfitShare, + newBatteryDesc, setNewBatteryDesc, + newBatteryBasePrice, setNewBatteryBasePrice, + newBatteryMinQuantity, setNewBatteryMinQuantity, + createBatteryPlan, handleSave, +}: BatteryInvestmentSettingsProps) { + const calculatedMinInvestment = newBatteryMinQuantity * newBatteryBasePrice; + return ( +
+
+

+ + Battery Investment Plans +

+
+ +
+
+

Battery Investment Plans ({(settings.plans as any).batteryInvestment?.length || 0})

+

Manage high-yield battery pack investment plans for partners

+
+ +
+ + {addBatteryPlan && ( +
+
+
+

New Battery Investment Plan

+

Configure high-yield battery fleet assets

+
+ +
+
+
+
+ + setNewBatteryName(e.target.value)} placeholder="e.g., Standard Battery Plan" className="w-full px-3 py-2 border border-slate-200 rounded-lg text-sm mt-1" /> +
+
+ + +
+
+ + setNewBatteryTarget(parseInt(e.target.value))} className="w-full px-3 py-2 border border-slate-200 rounded-lg text-sm mt-1" /> +
+
+ + setNewBatteryStart(e.target.value)} className="w-full px-3 py-2 border border-slate-200 rounded-lg text-sm mt-1" /> +
+
+ + setNewBatteryEnd(e.target.value)} className="w-full px-3 py-2 border border-slate-200 rounded-lg text-sm mt-1" /> +
+
+ + setNewBatteryBasePrice(parseInt(e.target.value))} className="w-full px-3 py-2 border border-slate-200 rounded-lg text-sm mt-1" placeholder="Single battery unit cost" /> +
+
+ + setNewBatteryMinQuantity(parseInt(e.target.value))} className="w-full px-3 py-2 border border-slate-200 rounded-lg text-sm mt-1" placeholder="Min battery packs to invest" /> +
+
+ +
+ + = Qty × Base Price +
+
+
+ + setNewBatteryMax(parseInt(e.target.value))} className="w-full px-3 py-2 border border-slate-200 rounded-lg text-sm mt-1" /> +
+
+ + setNewBatteryDuration(parseInt(e.target.value))} className="w-full px-3 py-2 border border-slate-200 rounded-lg text-sm mt-1" /> +
+
+ + setNewBatteryLock(parseInt(e.target.value))} className="w-full px-3 py-2 border border-slate-200 rounded-lg text-sm mt-1" /> +
+
+ + setNewBatteryPenalty(parseInt(e.target.value))} className="w-full px-3 py-2 border border-slate-200 rounded-lg text-sm mt-1" /> +
+
+ + setNewBatteryProfitShare(parseInt(e.target.value))} className="w-full px-3 py-2 border border-slate-200 rounded-lg text-sm mt-1" /> +
+
+
+ +