'use client' import { useState, useEffect } from 'react' import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' import { Button } from '@/components/ui/button' import { Input } from '@/components/ui/input' import { Label } from '@/components/ui/label' import { Textarea } from '@/components/ui/textarea' import { Badge } from '@/components/ui/badge' import { Switch } from '@/components/ui/switch' import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs' import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger } from '@/components/ui/dialog' import { Settings, DollarSign, Users, Package, Mail, Shield, Database, Plus, Edit, Trash2, Save, RefreshCw } from 'lucide-react' import { motion } from 'framer-motion' import { toast } from 'sonner' interface CommissionSetting { id: string level: number percentage: number isActive: boolean } interface Category { id: string name: string description: string | null image: string | null isActive: boolean productCount: number } interface SystemSettings { siteName: string siteDescription: string supportEmail: string minimumPayout: number enableReferrals: boolean enableCommissions: boolean maintenanceMode: boolean allowRegistration: boolean } export default function AdminSettingsPage() { const [commissionSettings, setCommissionSettings] = useState([]) const [categories, setCategories] = useState([]) const [systemSettings, setSystemSettings] = useState({ siteName: 'Padmaaja Rasooi', siteDescription: 'Premium quality rice products and grains. Experience the finest rice sourced directly from local farmers.', supportEmail: 'info@padmajarice.com', minimumPayout: 1000, enableReferrals: true, enableCommissions: true, maintenanceMode: false, allowRegistration: true }) const [loading, setLoading] = useState(true) const [saving, setSaving] = useState(false) const [editingCommission, setEditingCommission] = useState(null) const [editingCategory, setEditingCategory] = useState(null) const [newCommission, setNewCommission] = useState({ level: 1, percentage: 10, isActive: true }) const [newCategory, setNewCategory] = useState({ name: '', description: '', image: '' }) useEffect(() => { fetchSettings() }, []) const fetchSettings = async () => { try { setLoading(true) const [commissionsRes, categoriesRes, systemRes] = await Promise.all([ fetch('/api/admin/settings/commissions'), fetch('/api/admin/settings/categories'), fetch('/api/admin/settings/system') ]) const [commissionsData, categoriesData, systemData] = await Promise.all([ commissionsRes.json(), categoriesRes.json(), systemRes.json() ]) setCommissionSettings(commissionsData.settings || []) setCategories(categoriesData.categories || []) setSystemSettings(prev => ({ ...prev, ...systemData })) } catch (error) { console.error('Error fetching settings:', error) toast.error('Failed to load settings') } finally { setLoading(false) } } const saveSystemSettings = async () => { try { setSaving(true) const response = await fetch('/api/admin/settings/system', { method: 'PUT', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(systemSettings) }) if (!response.ok) throw new Error('Failed to save settings') toast.success('System settings saved successfully') // Show warning if maintenance mode was enabled if (systemSettings.maintenanceMode) { toast.warning('⚠️ Maintenance mode enabled! Public site is now offline.') } else { toast.success('✅ Maintenance mode disabled. Public site is now online.') } } catch (error) { console.error('Error saving system settings:', error) toast.error('Failed to save system settings') } finally { setSaving(false) } } const saveCommissionSetting = async (setting: CommissionSetting) => { try { const response = await fetch(`/api/admin/settings/commissions/${setting.id}`, { method: 'PUT', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(setting) }) if (!response.ok) throw new Error('Failed to save commission setting') toast.success('Commission setting saved successfully') fetchSettings() setEditingCommission(null) } catch (error) { console.error('Error saving commission setting:', error) toast.error('Failed to save commission setting') } } const addCommissionSetting = async () => { try { const response = await fetch('/api/admin/settings/commissions', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(newCommission) }) if (!response.ok) throw new Error('Failed to add commission setting') toast.success('Commission setting added successfully') setNewCommission({ level: 1, percentage: 10, isActive: true }) fetchSettings() } catch (error) { console.error('Error adding commission setting:', error) toast.error('Failed to add commission setting') } } const deleteCommissionSetting = async (id: string) => { try { const response = await fetch(`/api/admin/settings/commissions/${id}`, { method: 'DELETE' }) if (!response.ok) throw new Error('Failed to delete commission setting') toast.success('Commission setting deleted successfully') fetchSettings() } catch (error) { console.error('Error deleting commission setting:', error) toast.error('Failed to delete commission setting') } } const saveCategory = async (category: Category) => { try { const url = category.id.startsWith('new') ? '/api/admin/settings/categories' : `/api/admin/settings/categories/${category.id}` const response = await fetch(url, { method: category.id.startsWith('new') ? 'POST' : 'PUT', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ name: category.name, description: category.description, image: category.image, isActive: category.isActive }) }) if (!response.ok) throw new Error('Failed to save category') toast.success('Category saved successfully') fetchSettings() setEditingCategory(null) setNewCategory({ name: '', description: '', image: '' }) } catch (error) { console.error('Error saving category:', error) toast.error('Failed to save category') } } const deleteCategory = async (id: string) => { try { const response = await fetch(`/api/admin/settings/categories/${id}`, { method: 'DELETE' }) if (!response.ok) throw new Error('Failed to delete category') toast.success('Category deleted successfully') fetchSettings() } catch (error) { console.error('Error deleting category:', error) toast.error('Failed to delete category') } } if (loading) { return (
) } return (
{/* Header with maintenance warning */}

System Settings

Manage your platform configuration and settings

{systemSettings.maintenanceMode && (

Maintenance Mode Active

The public website is currently offline for regular users.

✅ Admin users (like you) can still access all pages normally.

)}
System Commissions Categories Security {/* System Settings */} General Settings
setSystemSettings(prev => ({ ...prev, siteName: e.target.value }))} />
setSystemSettings(prev => ({ ...prev, supportEmail: e.target.value }))} />