'use client'; import { useState } from 'react'; import { Settings, Upload, Image, Globe, Mail, MessageSquare, Phone, MapPin, Link2, Clock, Save, FileText, Camera, Palette, Ruler, Sun, Moon, Monitor, Smartphone, Tablet, Package, Wrench, FileCheck, BadgeDollarSign, CreditCard, Plus, X, DollarSign, Zap, Users, Check, Pencil, Trash2 } from 'lucide-react'; import RichTextEditor from '@/components/RichTextEditor'; interface CompanySettings { name: string; shortName: string; tagLine: string; description: string; email: string; phone: string; website: string; address: string; city: string; country: string; tin: string; bin: string; tradeLicense: string; timezone: string; currency: string; language: string; logo: string; favicon: string; primaryColor: string; secondaryColor: string; borderRadius: number; socialLinks: { facebook: string; twitter: string; instagram: string; linkedin: string; youtube: string; }; smtp: { host: string; port: number; user: string; password: string; fromEmail: string; fromName: string; encryption: 'ssl' | 'tls' | 'none'; }; sms: { provider: string; apiKey: string; senderId: string; url: string; }; heroData: { title: string; subtitle: string; ctaText: string; ctaLink: string; videoUrl: string; backgroundImage: string; }; masterData: { kycDocuments: { name: string; required: boolean }[]; riderDocuments: { id: string; name: string; required: boolean; description: string }[]; subscriptionPlans: { name: string; price: number; duration: number; features: string[] }[]; rentalPlans: { id: string; name: string; type: string; description: string; price: number; duration: number }[]; investorDocuments: { id: string; name: string; required: boolean; description: string }[]; merchantDocuments: { id: string; name: string; required: boolean; description: string }[]; swapStationDocuments: { id: string; name: string; required: boolean; description: string }[]; rentalDocuments: { type: 'single' | 'shared' | 'rent-to-own'; name: string; documents: { id: string; name: string; required: boolean; description: string }[]; }[]; }; parts: { id: string; name: string; buyingPrice: number; sellingPrice: number }[]; serviceCenters: { id: string; name: string; address: string; phone: string; rating: number }[]; companyPolicy: { investor: { title: string; description: string }[]; merchant: { title: string; description: string }[]; swapStation: { title: string; description: string }[]; rentalTypes: { single: { title: string; description: string }[]; shared: { title: string; description: string }[]; renttoown: { title: string; description: string }[]; }; }; rentalPolicy: { minAge: number; requireLicense: boolean; deposit: number; lateFeePerHour: number; cancellationFee: number; damagePenalty: { level: string; amount: number }[]; rules: string[]; }; plans: { singleRent: { tier: 'Economy' | 'Standard' | 'Premium'; name: string; contractMonths: number[]; dailyRent: number; deposit: number; weeklySubscription: number; monthlySubscription: number; ficoSharePercent: number; description: string; }[]; rentToOwn: { tier: 'Economy' | 'Standard' | 'Premium'; name: string; contractMonths: number[]; dailyRent: number; deposit: number; weeklySubscription: number; monthlySubscription: number; durationMonths: number; evPrice: number; totalPayment: number; profit: number; ficoRentSharePercent: number; ficoProfitSharePercent: number; description: string; }[]; shareEv: { tier: 'Economy' | 'Standard' | 'Premium'; name: string; contractMonths: number[]; dailyRentEach: number; totalDailyRent: number; depositEach: number; totalDeposit: number; weeklySubscriptionEach: number; totalWeeklySubscription: number; monthlySubscriptionEach: number; totalMonthlySubscription: number; ficoSharePercent: number; description: string; }[]; investment: { id: string; tier: string; name: string; minInvestment: number; maxInvestment: number; monthlyReturnPercent: number; durationMonths: number; profitSharePercent: number; lockInMonths: number; totalReturnPercent: number; earlyExitPenalty: number; startDate: string; endDate: string; targetAmount: number; status: string; description: string; }[]; swapStation: { id: string; name: string; batteryCount: number; swapPrice: number; monthlySubscription: number; dailySubscription: number; minBatteries: number; maxBatteries: number; profitSharePercent: number; status: string; description: string; }[]; riderRequest: { id: string; tier: string; name: string; minRiders: number; maxRiders: number; monthlySubscription: number; dailySubscription: number; deposit: number; commissionPercent: number; dailyRideTarget: number; weeklyHoliday: number; status: string; description: string; }[]; }; } const initialSettings: CompanySettings = { name: 'JAIBEN Mobility Ltd', shortName: 'JAIBEN', tagLine: 'Your Trusted EV Mobility Partner', description: 'Leading electric vehicle rental and swap station network in Bangladesh', email: 'info@jaiben.com', phone: '+880 9611-222-333', website: 'https://jaiben.com', address: 'House 45, Road 13, Gulshan 1', city: 'Dhaka', country: 'Bangladesh', tin: '123456789012', bin: '987654321098', tradeLicense: 'TRAD/2023/001234', timezone: 'Asia/Dhaka', currency: 'BDT', language: 'en', logo: '/logo.png', favicon: '/favicon.ico', primaryColor: '#10B981', secondaryColor: '#3B82F6', borderRadius: 8, socialLinks: { facebook: 'https://facebook.com/jaiben', twitter: 'https://twitter.com/jaiben', instagram: 'https://instagram.com/jaiben', linkedin: 'https://linkedin.com/company/jaiben', youtube: 'https://youtube.com/@jaiben' }, smtp: { host: 'smtp.mailserver.com', port: 587, user: 'noreply@jaiben.com', password: '••••••••••••', fromEmail: 'noreply@jaiben.com', fromName: 'JAIBEN Mobility', encryption: 'tls' }, sms: { provider: 'BulkSMS', apiKey: '••••••••••••••••', senderId: 'JAIBEN', url: 'https://api.bulksmsbd.com' }, heroData: { title: 'Welcome to JAIBEN', subtitle: 'Your trusted partner for electric vehicle mobility solutions across Bangladesh', ctaText: 'Get Started', ctaLink: '/rent', videoUrl: '', backgroundImage: '/hero-bg.jpg' }, masterData: { kycDocuments: [ { name: 'NID Card', required: true }, { name: 'Driving License', required: true }, { name: 'Passport Photo', required: true }, { name: 'Address Proof', required: false }, { name: 'Business Trade License', required: false }, ], riderDocuments: [ { id: 'rider_nid_front', name: 'NID (Front)', required: true, description: 'National ID card front side' }, { id: 'rider_nid_back', name: 'NID (Back)', required: true, description: 'National ID card back side' }, { id: 'rider_license', name: 'Driving License', required: true, description: 'Valid driving license' }, { id: 'rider_photo', name: 'Profile Photo', required: true, description: 'Recent passport size photo' }, { id: 'rider_bank_card', name: 'Bank Account Card', required: false, description: 'Bank account card/cheque' }, { id: 'rider_wallet', name: 'Mobile Wallet Info', required: false, description: 'bKash/Rocket account details' }, ], subscriptionPlans: [ { name: 'Daily', price: 500, duration: 1, features: ['24 hours access', 'Basic support'] }, { name: 'Weekly', price: 3000, duration: 7, features: ['7 days access', 'Priority support', 'Free swap'] }, { name: 'Monthly', price: 10000, duration: 30, features: ['30 days access', 'VIP support', 'Unlimited swap', 'Damage coverage'] }, { name: 'Yearly', price: 80000, duration: 365, features: ['1 year access', 'Dedicated manager', 'Unlimited swap', 'Full coverage', 'Discounted rates'] }, ], rentalPlans: [ { id: 'single_rent', name: 'Single Rent', type: 'single', description: 'Single person rental plan', price: 500, duration: 1 }, { id: 'weekly_rent', name: 'Weekly Rent', type: 'weekly', description: '7 days rental plan', price: 3000, duration: 7 }, { id: 'monthly_rent', name: 'Monthly Rent', type: 'monthly', description: '30 days rental plan', price: 10000, duration: 30 }, { id: 'rent_to_own', name: 'Rent to Own', type: 'rent-to-own', description: 'Own after X months', price: 15000, duration: 365 }, { id: 'share_ev', name: 'Share EV', type: 'shared', description: 'Shared bike', price: 2500, duration: 30 }, ], investorDocuments: [ { id: 'inv_nid', name: 'NID Card (Front & Back)', required: true, description: 'National ID card copy' }, { id: 'inv_photo', name: 'Passport Size Photo', required: true, description: 'Recent passport size photograph' }, { id: 'inv_bank', name: 'Bank Account Info', required: true, description: 'Bank account details for earnings' }, { id: 'inv_mobile', name: 'Mobile Banking', required: true, description: 'bKash/Rocket account details' }, { id: 'inv_tin', name: 'TIN Certificate', required: false, description: 'Tax Identification Number' }, { id: 'inv_tax', name: 'Tax Return', required: false, description: 'Recent tax return copy' }, { id: 'inv_ec', name: 'Emergency Contact ID', required: false, description: 'Emergency contact NID copy' }, ], merchantDocuments: [ { id: 'mer_trade', name: 'Trade License', required: true, description: 'Business trade license' }, { id: 'mer_nid', name: 'Owner NID Card', required: true, description: 'Owner/proprietor NID card' }, { id: 'mer_photo', name: 'Shop Photo', required: true, description: 'Photo of shop premises' }, { id: 'mer_tin', name: 'TIN Certificate', required: true, description: 'Tax Identification Number' }, { id: 'mer_bank', name: 'Bank Account Info', required: true, description: 'Business bank account' }, { id: 'mer_agreement', name: 'Shop Agreement', required: false, description: 'Rent agreement or ownership' }, { id: 'mer_fire', name: 'Fire License', required: false, description: 'Fire safety license' }, ], swapStationDocuments: [ { id: 'ss_trade', name: 'Trade License', required: true, description: 'Business trade license' }, { id: 'ss_owner_nid', name: 'Owner NID Card', required: true, description: 'Proprietor NID card' }, { id: 'ss_photo', name: 'Station Photo', required: true, description: 'Photo of swap station' }, { id: 'ss_tin', name: 'TIN Certificate', required: true, description: 'Tax Identification Number' }, { id: 'ss_electric', name: 'Electricity Bill', required: true, description: 'Recent electricity bill' }, { id: 'ss_agreement', name: 'Space Agreement', required: false, description: 'Rent/space agreement' }, { id: 'ss_safety', name: 'Safety Certificate', required: false, description: 'Electrical safety certificate' }, ], rentalDocuments: [ { type: 'single', name: 'Rental (Single)', documents: [ { id: 'rent_nid', name: 'NID Card', required: true, description: 'Valid National ID' }, { id: 'rent_license', name: 'Driving License', required: true, description: 'Valid driving license' }, { id: 'rent_photo', name: 'Passport Photo', required: true, description: 'Recent photo' }, { id: 'rent_deposit', name: 'Deposit Receipt', required: true, description: 'Security deposit proof' }, { id: 'rent_ec', name: 'Emergency Contact', required: true, description: 'Emergency contact info' }, ] }, { type: 'shared', name: 'Rental (2 Person Shared)', documents: [ { id: 'rent_nid_1', name: 'Rider 1 - NID Card', required: true, description: 'Primary rider NID' }, { id: 'rent_license_1', name: 'Rider 1 - Driving License', required: true, description: 'Primary rider license' }, { id: 'rent_nid_2', name: 'Rider 2 - NID Card', required: true, description: 'Secondary rider NID' }, { id: 'rent_license_2', name: 'Rider 2 - Driving License', required: true, description: 'Secondary rider license' }, { id: 'rent_photo', name: 'Passport Photos (Both)', required: true, description: 'Photos of both riders' }, { id: 'rent_deposit', name: 'Deposit Receipt', required: true, description: 'Security deposit proof' }, { id: 'rent_agreement', name: 'Shared Agreement', required: true, description: 'Agreement between riders' }, { id: 'rent_ec', name: 'Emergency Contacts', required: true, description: 'Emergency contacts for both' }, ] }, { type: 'rent-to-own', name: 'Rent-to-Own', documents: [ { id: 'rto_nid', name: 'NID Card', required: true, description: 'Valid National ID' }, { id: 'rto_license', name: 'Driving License', required: true, description: 'Valid driving license' }, { id: 'rto_photo', name: 'Passport Photo', required: true, description: 'Recent photo' }, { id: 'rto_income', name: 'Income Proof', required: true, description: 'Salary/income certificate' }, { id: 'rto_bank', name: 'Bank Statement', required: true, description: '6 months bank statement' }, { id: 'rto_tin', name: 'TIN Certificate', required: false, description: 'Tax Identification Number' }, { id: 'rto_guarantor', name: 'Guarantor Info', required: true, description: 'Guarantor details' }, { id: 'rto_guarantor_nid', name: 'Guarantor NID', required: true, description: 'Guarantor NID copy' }, { id: 'rto_agreement', name: 'RTO Agreement', required: true, description: 'Rent-to-own contract' }, { id: 'rto_insurance', name: 'Insurance', required: false, description: 'Vehicle insurance' }, ] }, ] }, parts: [ { id: 'PRT-001', name: 'Battery 60V', buyingPrice: 12000, sellingPrice: 15000 }, { id: 'PRT-002', name: 'Battery 48V', buyingPrice: 9000, sellingPrice: 12000 }, { id: 'PRT-003', name: 'Front Tire', buyingPrice: 1800, sellingPrice: 2500 }, { id: 'PRT-004', name: 'Rear Tire', buyingPrice: 1800, sellingPrice: 2500 }, { id: 'PRT-005', name: 'Brake Pad', buyingPrice: 500, sellingPrice: 800 }, { id: 'PRT-006', name: 'Mirror', buyingPrice: 200, sellingPrice: 350 }, { id: 'PRT-007', name: 'Controller', buyingPrice: 3000, sellingPrice: 4500 }, { id: 'PRT-008', name: 'Motor', buyingPrice: 7000, sellingPrice: 10000 }, { id: 'PRT-009', name: 'Charger', buyingPrice: 1200, sellingPrice: 2000 }, { id: 'PRT-010', name: 'Display Meter', buyingPrice: 800, sellingPrice: 1200 }, { id: 'PRT-011', name: 'Throttle', buyingPrice: 500, sellingPrice: 800 }, { id: 'PRT-012', name: 'Brake Cable', buyingPrice: 150, sellingPrice: 250 }, { id: 'PRT-013', name: 'Chain', buyingPrice: 400, sellingPrice: 600 }, { id: 'PRT-014', name: 'Sprocket', buyingPrice: 300, sellingPrice: 450 }, { id: 'PRT-015', name: 'Foot Peg', buyingPrice: 180, sellingPrice: 300 }, ], serviceCenters: [ { id: 'SC-001', name: 'JAIBEN Service Center - Gulshan', address: 'House 45, Road 13, Gulshan 1, Dhaka', phone: '+8801712345670', rating: 4.8 }, { id: 'SC-002', name: 'JAIBEN Service Center - Banani', address: 'Road 11, Banani, Dhaka', phone: '+8801712345671', rating: 4.5 }, ], companyPolicy: { investor: [ { title: 'Investor Policy', description: '

Investor Guidelines

Welcome to our investor program. This document outlines the terms and conditions for all investors participating in our EV fleet sharing initiative.

Key Requirements

Note: Past performance does not guarantee future results. Please read all terms carefully before investing.

' }, { title: 'Investor Risk Policy', description: '

Risk Disclosure

All investments carry risk. Past performance does not guarantee future results.

Risk Factors

' }, { title: 'Investor Returns Policy', description: '

Returns

Returns depend on fleet performance and utilization.

Return Calculation

' } ], merchant: [ { title: 'Merchant Policy', description: '

Merchant Terms

Thank you for joining our merchant network. These guidelines ensure smooth operations.

Operational Requirements

' }, { title: 'Merchant SLA Policy', description: '

Service Level Agreement

Orders must be processed within 24 hours.

Response Time

' }, { title: 'Merchant Commission Policy', description: '

Commission

Merchants earn 15% commission per order.

Commission Structure

' } ], swapStation: [ { title: 'Swap Station Policy', description: '

Swap Guidelines

Follow safety protocols when handling batteries.

General Guidelines

' }, { title: 'Battery Safety Policy', description: '

Battery Handling

Use gloves and inspect batteries before and after swapping.

Safety Measures

' }, { title: 'Maintenance Policy', description: '

Maintenance

Keep stations clean and operational at all times.

Daily Tasks

' } ], rentalTypes: { single: [ { title: 'Rental (Single)', description: '

Single Rental

Perfect for individual riders who need a reliable vehicle for daily commute or delivery work.

Plan Features

' }, { title: 'Single Rental Pricing', description: '

Pricing

Starts from ৳400/day with ৳5,000 deposit.

Rates

' }, { title: 'Single Rental Benefits', description: '

Benefits

Includes maintenance, insurance, and support.

Included

' } ], shared: [ { title: 'Rental (2 Person Shared)', description: '

Shared Plan

Two riders share cost and responsibilities.

Plan Features

' }, { title: 'Shared Plan Benefits', description: '

Benefits

Split payment and flexible usage.

Advantages

' }, { title: 'Shared Pricing', description: '

Pricing

৳600/day total (৳300 each).

Rates

' } ], renttoown: [ { title: 'Rent-to-Own', description: '

Ownership Plan

Own vehicle after completing payment tenure.

Program Benefits

' }, { title: 'Eligibility', description: '

Eligibility

Requires good payment history.

Requirements

' }, { title: 'Ownership Benefits', description: '

Benefits

50% of payments go toward vehicle purchase.

Advantages

' } ] }, }, rentalPolicy: { minAge: 18, requireLicense: true, deposit: 5000, lateFeePerHour: 200, cancellationFee: 1000, damagePenalty: [ { level: 'Minor Scratch', amount: 500 }, { level: 'Major Damage', amount: 5000 }, { level: 'Total Loss', amount: 25000 }, ], rules: [ 'No smoking in vehicles', 'Return with same fuel/charge level', 'No unauthorized drivers', 'Follow traffic rules', 'Report accidents within 24 hours', ] }, plans: { singleRent: [ { tier: 'Premium', name: 'Single Rent - Premium', contractMonths: [1, 3, 6, 12], dailyRent: 400, deposit: 25000, weeklySubscription: 2800, monthlySubscription: 12000, ficoSharePercent: 50, description: 'Premium single person rental plan with extra benefits', }, { tier: 'Standard', name: 'Single Rent - Standard', contractMonths: [1, 3, 6, 12], dailyRent: 300, deposit: 20000, weeklySubscription: 2100, monthlySubscription: 9000, ficoSharePercent: 45, description: 'Standard single person rental plan', }, { tier: 'Economy', name: 'Single Rent - Economy', contractMonths: [1, 3, 6, 12], dailyRent: 250, deposit: 15000, weeklySubscription: 1750, monthlySubscription: 7500, ficoSharePercent: 40, description: 'Economy single person rental plan', } ], rentToOwn: [ { tier: 'Premium', name: 'Rent to Own - Premium', contractMonths: [12, 18, 24, 36], dailyRent: 350, deposit: 25000, weeklySubscription: 2450, monthlySubscription: 10500, durationMonths: 18, evPrice: 150000, totalPayment: 170000, profit: 20000, ficoRentSharePercent: 50, ficoProfitSharePercent: 45, description: 'Premium rent to own plan with high-end EV', }, { tier: 'Standard', name: 'Rent to Own - Standard', contractMonths: [12, 18, 24, 36], dailyRent: 250, deposit: 18000, weeklySubscription: 1750, monthlySubscription: 7000, durationMonths: 18, evPrice: 120000, totalPayment: 135000, profit: 15000, ficoRentSharePercent: 45, ficoProfitSharePercent: 45, description: 'Standard rent to own plan', }, { tier: 'Economy', name: 'Rent to Own - Economy', contractMonths: [12, 18, 24, 36], dailyRent: 200, deposit: 15000, weeklySubscription: 1400, monthlySubscription: 6000, durationMonths: 18, evPrice: 100000, totalPayment: 115000, profit: 15000, ficoRentSharePercent: 40, ficoProfitSharePercent: 40, description: 'Economy rent to own plan', } ], shareEv: [ { tier: 'Premium', name: 'Share an EV - Premium', contractMonths: [1, 3, 6, 12], dailyRentEach: 300, totalDailyRent: 600, depositEach: 20000, totalDeposit: 40000, weeklySubscriptionEach: 2100, totalWeeklySubscription: 4200, monthlySubscriptionEach: 8400, totalMonthlySubscription: 16800, ficoSharePercent: 50, description: 'Premium shared EV with premium bikes', }, { tier: 'Standard', name: 'Share an EV - Standard', contractMonths: [1, 3, 6, 12], dailyRentEach: 200, totalDailyRent: 400, depositEach: 15000, totalDeposit: 30000, weeklySubscriptionEach: 1400, totalWeeklySubscription: 2800, monthlySubscriptionEach: 5600, totalMonthlySubscription: 11200, ficoSharePercent: 45, description: 'Standard shared EV plan', }, { tier: 'Economy', name: 'Share an EV - Economy', contractMonths: [1, 3, 6, 12], dailyRentEach: 150, totalDailyRent: 300, depositEach: 12000, totalDeposit: 24000, weeklySubscriptionEach: 1050, totalWeeklySubscription: 2100, monthlySubscriptionEach: 4200, totalMonthlySubscription: 8400, ficoSharePercent: 40, description: 'Economy shared EV plan', } ], investment: [ { id: 'inv_demo_1', name: '1 Bike Plan', tier: 'Economy', minInvestment: 50000, maxInvestment: 100000, monthlyReturnPercent: 2, durationMonths: 12, profitSharePercent: 50, lockInMonths: 3, totalReturnPercent: 24, earlyExitPenalty: 10, startDate: '2026-01-01', endDate: '2026-12-31', targetAmount: 1000000, status: 'active', description: 'Investment plan for 1 bike - perfect for small investors', }, { id: 'inv_demo_2', name: '5 Bike Plan', tier: 'Standard', minInvestment: 150000, maxInvestment: 500000, monthlyReturnPercent: 2.5, durationMonths: 24, profitSharePercent: 50, lockInMonths: 6, totalReturnPercent: 60, earlyExitPenalty: 10, startDate: '2026-01-01', endDate: '2026-12-31', targetAmount: 5000000, status: 'active', description: 'Investment plan for 5 bikes - medium scale investment', } ], swapStation: [ { id: 'ss_1', name: 'Basic Swap Station', batteryCount: 10, swapPrice: 50, monthlySubscription: 500, dailySubscription: 20, minBatteries: 1, maxBatteries: 5, profitSharePercent: 50, status: 'active', description: 'Basic swap station for small operators', }, { id: 'ss_2', name: 'Premium Swap Station', batteryCount: 50, swapPrice: 45, monthlySubscription: 2000, dailySubscription: 80, minBatteries: 10, maxBatteries: 30, profitSharePercent: 55, status: 'active', description: 'Premium swap station for large operators', } ], riderRequest: [ { id: 'rider_1', tier: 'Premium', name: 'Premium Rider Plan', minRiders: 10, maxRiders: 50, monthlySubscription: 3000, dailySubscription: 150, deposit: 5000, commissionPercent: 70, dailyRideTarget: 15, weeklyHoliday: 1, status: 'active', description: 'Premium rider plan for high volume operators', }, { id: 'rider_2', tier: 'Standard', name: 'Standard Rider Plan', minRiders: 5, maxRiders: 20, monthlySubscription: 1500, dailySubscription: 80, deposit: 3000, commissionPercent: 60, dailyRideTarget: 10, weeklyHoliday: 1, status: 'active', description: 'Standard rider plan for medium operators', }, { id: 'rider_3', tier: 'Economy', name: 'Economy Rider Plan', minRiders: 1, maxRiders: 10, monthlySubscription: 500, dailySubscription: 30, deposit: 1000, commissionPercent: 50, dailyRideTarget: 5, weeklyHoliday: 0, status: 'active', description: 'Economy rider plan for small operators', } ], }, }; export default function CompanySettingsPage() { const [settings, setSettings] = useState(initialSettings); const [activeTab, setActiveTab] = useState<'general' | 'branding' | 'social' | 'integration' | 'landing' | 'kyc' | 'parts' | 'companyPolicy' | 'plans' | 'investment' | 'swapstation' | 'riderrequest'>('general'); const [activeMasterTab, setActiveMasterTab] = useState<'investor' | 'merchant' | 'swapstation' | 'rentalType'>('investor'); const [activeRentalTypeTab, setActiveRentalTypeTab] = useState<'single' | 'shared' | 'renttoown'>('single'); const [saved, setSaved] = useState(false); const [activePlanTab, setActivePlanTab] = useState<'singleRent' | 'rentToOwn' | 'shareEv'>('singleRent'); const [addDocType, setAddDocType] = useState<'investor' | 'merchant' | 'swapstation' | 'rental' | null>(null); const [newDocName, setNewDocName] = useState(''); const [newDocDesc, setNewDocDesc] = useState(''); const [activeInvestTab, setActiveInvestTab] = useState(0); const [editingPolicy, setEditingPolicy] = useState<{ tab: string; index: number } | null>(null); const [editPolicyName, setEditPolicyName] = useState(''); const [editPolicyDesc, setEditPolicyDesc] = useState(''); const [editPolicyDescHtml, setEditPolicyDescHtml] = useState(''); const [showAddPolicy, setShowAddPolicy] = useState(false); const [newPolicyName, setNewPolicyName] = useState(''); const [newPolicyDesc, setNewPolicyDesc] = useState(''); const [addInvestPlan, setAddInvestPlan] = useState(false); const [newInvestName, setNewInvestName] = useState(''); const [newInvestTier, setNewInvestTier] = useState('Standard'); const [newInvestStatus, setNewInvestStatus] = useState('active'); const [newInvestTarget, setNewInvestTarget] = useState(1000000); const [newInvestStart, setNewInvestStart] = useState('2026-01-01'); const [newInvestEnd, setNewInvestEnd] = useState('2026-12-31'); const [newInvestMin, setNewInvestMin] = useState(10000); const [newInvestMax, setNewInvestMax] = useState(100000); const [newInvestMonthly, setNewInvestMonthly] = useState(2); const [newInvestDuration, setNewInvestDuration] = useState(12); const [newInvestLock, setNewInvestLock] = useState(3); const [newInvestTotal, setNewInvestTotal] = useState(24); const [newInvestPenalty, setNewInvestPenalty] = useState(10); const [newInvestDesc, setNewInvestDesc] = useState(''); const createInvestPlan = () => { if (newInvestName.trim() && typeof window !== 'undefined') { const ficoShare = settings.plans.singleRent[0]?.ficoSharePercent || 50; const newPlan = { id: 'inv_' + Date.now(), name: newInvestName, tier: newInvestTier, minInvestment: newInvestMin, maxInvestment: newInvestMax, monthlyReturnPercent: newInvestMonthly, durationMonths: newInvestDuration, profitSharePercent: ficoShare, lockInMonths: newInvestLock, totalReturnPercent: newInvestTotal, earlyExitPenalty: newInvestPenalty, startDate: newInvestStart, endDate: newInvestEnd, targetAmount: newInvestTarget, status: newInvestStatus, description: newInvestDesc }; const updatedPlans = [...settings.plans.investment, newPlan]; setSettings({ ...settings, plans: { ...settings.plans, investment: updatedPlans } }); setActiveInvestTab(updatedPlans.length - 1); setAddInvestPlan(false); setNewInvestName(''); } }; const [activeSwapTab, setActiveSwapTab] = useState(0); const [addSwapStationPlan, setAddSwapStationPlan] = useState(false); const [newSwapName, setNewSwapName] = useState(''); const [newSwapStatus, setNewSwapStatus] = useState('active'); const [newSwapBatteryCount, setNewSwapBatteryCount] = useState(10); const [newSwapPrice, setNewSwapPrice] = useState(50); const [newSwapMonthly, setNewSwapMonthly] = useState(500); const [newSwapDaily, setNewSwapDaily] = useState(20); const [newSwapMin, setNewSwapMin] = useState(1); const [newSwapMax, setNewSwapMax] = useState(5); const [newSwapProfit, setNewSwapProfit] = useState(50); const [newSwapDesc, setNewSwapDesc] = useState(''); const createSwapStationPlan = () => { if (newSwapName.trim() && typeof window !== 'undefined') { const newPlan = { id: 'ss_' + Date.now(), name: newSwapName, batteryCount: newSwapBatteryCount, swapPrice: newSwapPrice, monthlySubscription: newSwapMonthly, dailySubscription: newSwapDaily, minBatteries: newSwapMin, maxBatteries: newSwapMax, profitSharePercent: newSwapProfit, status: newSwapStatus, description: newSwapDesc }; const updatedPlans = [...settings.plans.swapStation, newPlan]; setSettings({ ...settings, plans: { ...settings.plans, swapStation: updatedPlans } }); setActiveSwapTab(updatedPlans.length - 1); setAddSwapStationPlan(false); setNewSwapName(''); } }; const [activeRiderTab, setActiveRiderTab] = useState(0); const [addRiderPlan, setAddRiderPlan] = useState(false); const [newRiderName, setNewRiderName] = useState(''); const [newRiderTier, setNewRiderTier] = useState('Standard'); const [newRiderStatus, setNewRiderStatus] = useState('active'); const [newRiderMin, setNewRiderMin] = useState(1); const [newRiderMax, setNewRiderMax] = useState(10); const [newRiderMonthly, setNewRiderMonthly] = useState(500); const [newRiderDaily, setNewRiderDaily] = useState(30); const [newRiderDeposit, setNewRiderDeposit] = useState(1000); const [newRiderCommission, setNewRiderCommission] = useState(50); const [newRiderTarget, setNewRiderTarget] = useState(5); const [newRiderHoliday, setNewRiderHoliday] = useState(0); const [newRiderDesc, setNewRiderDesc] = useState(''); const createRiderPlan = () => { if (newRiderName.trim() && typeof window !== 'undefined') { const newPlan = { id: 'rider_' + Date.now(), name: newRiderName, tier: newRiderTier, minRiders: newRiderMin, maxRiders: newRiderMax, monthlySubscription: newRiderMonthly, dailySubscription: newRiderDaily, deposit: newRiderDeposit, commissionPercent: newRiderCommission, dailyRideTarget: newRiderTarget, weeklyHoliday: newRiderHoliday, status: newRiderStatus, description: newRiderDesc }; const updatedPlans = [...settings.plans.riderRequest, newPlan]; setSettings({ ...settings, plans: { ...settings.plans, riderRequest: updatedPlans } }); setActiveRiderTab(updatedPlans.length - 1); setAddRiderPlan(false); setNewRiderName(''); } }; const handleSave = () => { setSaved(true); setTimeout(() => setSaved(false), 2000); }; const addPolicyRule = (tab: 'investor' | 'merchant' | 'swapstation') => { if (!newPolicyName.trim()) return; const newRule = { title: newPolicyName, description: newPolicyDesc || '

' }; if (tab === 'investor') { setSettings({ ...settings, companyPolicy: { ...settings.companyPolicy, investor: [...settings.companyPolicy.investor, newRule] } }); } else if (tab === 'merchant') { setSettings({ ...settings, companyPolicy: { ...settings.companyPolicy, merchant: [...settings.companyPolicy.merchant, newRule] } }); } else if (tab === 'swapstation') { setSettings({ ...settings, companyPolicy: { ...settings.companyPolicy, swapStation: [...settings.companyPolicy.swapStation, newRule] } }); } setNewPolicyName(''); setNewPolicyDesc(''); setShowAddPolicy(false); }; const deletePolicyRule = (tab: 'investor' | 'merchant' | 'swapstation', index: number) => { if (tab === 'investor') { const newRules = settings.companyPolicy.investor.filter((_, i) => i !== index); setSettings({ ...settings, companyPolicy: { ...settings.companyPolicy, investor: newRules } }); } else if (tab === 'merchant') { const newRules = settings.companyPolicy.merchant.filter((_, i) => i !== index); setSettings({ ...settings, companyPolicy: { ...settings.companyPolicy, merchant: newRules } }); } else if (tab === 'swapstation') { const newRules = settings.companyPolicy.swapStation.filter((_, i) => i !== index); setSettings({ ...settings, companyPolicy: { ...settings.companyPolicy, swapStation: newRules } }); } }; const updatePolicyRule = (tab: 'investor' | 'merchant' | 'swapstation', index: number) => { const newDesc = editPolicyDescHtml || editPolicyDesc; if (tab === 'investor') { const newRules = [...settings.companyPolicy.investor]; newRules[index] = { title: editPolicyName, description: newDesc }; setSettings({ ...settings, companyPolicy: { ...settings.companyPolicy, investor: newRules } }); } else if (tab === 'merchant') { const newRules = [...settings.companyPolicy.merchant]; newRules[index] = { title: editPolicyName, description: newDesc }; setSettings({ ...settings, companyPolicy: { ...settings.companyPolicy, merchant: newRules } }); } else if (tab === 'swapstation') { const newRules = [...settings.companyPolicy.swapStation]; newRules[index] = { title: editPolicyName, description: newDesc }; setSettings({ ...settings, companyPolicy: { ...settings.companyPolicy, swapStation: newRules } }); } setEditingPolicy(null); }; const tabs = [ { id: 'general', label: 'General', icon: Settings }, { id: 'branding', label: 'Branding', icon: Palette }, { id: 'social', label: 'Social Media', icon: Link2 }, { id: 'integration', label: 'Integrations', icon: Mail }, { id: 'landing', label: 'Landing Page', icon: Monitor }, { id: 'companyPolicy', label: "Company's Policy", icon: FileCheck }, { id: 'kyc', label: 'KYC Documents', icon: Package }, { id: 'plans', label: 'Plan Selection', icon: Package }, { id: 'investment', label: 'Investment Plan', icon: DollarSign }, { id: 'swapstation', label: 'Swap Station Plan (P3)', icon: Zap }, { id: 'riderrequest', label: 'Rider Request Plan (P2)', icon: Users }, { id: 'parts', label: 'EV Parts', icon: Package }, ]; return (

Company Settings

Manage your company information and configurations

{/* */}
{saved && (
Settings saved successfully!
)}
{activeTab === 'general' && (

General Information

setSettings({ ...settings, name: e.target.value })} className="w-full px-3 py-2 border border-slate-200 rounded-lg text-sm mt-1" />
setSettings({ ...settings, shortName: e.target.value })} className="w-full px-3 py-2 border border-slate-200 rounded-lg text-sm mt-1" />
setSettings({ ...settings, tagLine: e.target.value })} className="w-full px-3 py-2 border border-slate-200 rounded-lg text-sm mt-1" />
setSettings({ ...settings, website: e.target.value })} className="w-full px-3 py-2 border border-slate-200 rounded-lg text-sm mt-1" />