'use client' import { useEffect, useState } from 'react' import { signOut, useSession } from 'next-auth/react' import { useRouter } from 'next/navigation' import { Badge } from '@/components/ui/badge' import { Button } from '@/components/ui/button' import { Card, CardDescription, CardHeader, CardTitle } from '@/components/ui/card' import { BarChart3, BrainCircuit, Eye, LayoutDashboard, LogOut, Package, PanelTop, ShoppingCart, Truck, User, UserCog, Users, Wrench, } from 'lucide-react' import POSModule from '@/components/pos/POSModule' import { ProduitListe } from '@/components/products/ProduitListe' import { ClientList } from '@/components/clients/client-list' import AtelierModule from '@/components/atelier/AtelierModule' import { SupplierList } from '@/components/suppliers/SupplierList' import PurchaseModule from '@/components/purchases/PurchaseModule' import ReportsModule from '@/components/reports/ReportsModule' import { EmployeeManagement } from '@/components/employees/EmployeeManagement' import { AIAssistant } from '@/components/ai/AIAssistant' import { ThemeToggle } from '@/components/theme-toggle' import { SellerWizard } from '@/components/seller-wizard/SellerWizard' type RoleEmploye = 'VENDEUR' | 'RESPONSABLE' | 'ADMIN' type Module = | 'HOME' | 'CLIENTS' | 'PRODUITS' | 'FOURNISSEURS' | 'ACHATS' | 'VENTE' | 'RAPPORTS' | 'ATELIER' | 'UTILISATEURS' | 'IA' | 'VENDEUR_WIZARD' interface ModuleCard { id: Module title: string description: string icon: React.ReactNode badge?: string color: string roles: RoleEmploye[] } const modules: ModuleCard[] = [ { id: 'VENDEUR_WIZARD', title: 'Vendeur Express', description: 'Parcours rapide client, service, recu', icon: , badge: 'Tablette', color: 'bg-rose-500', roles: ['VENDEUR', 'RESPONSABLE', 'ADMIN'], }, { id: 'CLIENTS', title: 'Gestion Clients', description: 'Fiches clients, mesures de vision, ordonnances', icon: , color: 'bg-blue-500', roles: ['VENDEUR', 'RESPONSABLE', 'ADMIN'], }, { id: 'PRODUITS', title: 'Gestion Produits', description: 'Catalogue, stock, images, QR codes', icon: , badge: 'Alertes', color: 'bg-emerald-500', roles: ['VENDEUR', 'RESPONSABLE', 'ADMIN'], }, { id: 'FOURNISSEURS', title: 'Fournisseurs', description: 'Gestion des fournisseurs et contacts', icon: , color: 'bg-orange-500', roles: ['RESPONSABLE', 'ADMIN'], }, { id: 'ACHATS', title: 'Achats & Stock', description: 'Reception, factures fournisseurs, entrees stock', icon: , color: 'bg-purple-500', roles: ['RESPONSABLE', 'ADMIN'], }, { id: 'VENTE', title: 'Point de Vente', description: 'Encaissement, facturation, POS', icon: , badge: 'Actif', color: 'bg-green-500', roles: ['VENDEUR', 'RESPONSABLE', 'ADMIN'], }, { id: 'ATELIER', title: 'Atelier', description: 'Montage de lunettes, commandes en cours', icon: , badge: 'En cours', color: 'bg-amber-500', roles: ['VENDEUR', 'RESPONSABLE', 'ADMIN'], }, { id: 'RAPPORTS', title: 'Rapports', description: 'Statistiques, exports Excel/CSV/PDF', icon: , color: 'bg-cyan-500', roles: ['RESPONSABLE', 'ADMIN'], }, { id: 'UTILISATEURS', title: 'Utilisateurs', description: 'Employes, roles et niveaux d acces', icon: , color: 'bg-indigo-500', roles: ['ADMIN'], }, { id: 'IA', title: 'Assistant IA', description: 'Conseils, priorites et aide a la decision', icon: , badge: 'Nouveau', color: 'bg-sky-500', roles: ['RESPONSABLE', 'ADMIN'], }, ] export default function Home() { const { data: session, status } = useSession() const router = useRouter() const [currentModule, setCurrentModule] = useState('HOME') const currentRole = ((session?.user as any)?.role || 'VENDEUR') as RoleEmploye const visibleModules = modules.filter((module) => module.roles.includes(currentRole)) useEffect(() => { if (status === 'unauthenticated') { router.push('/login') } }, [status, router]) useEffect(() => { const current = modules.find((module) => module.id === currentModule) if (current && !current.roles.includes(currentRole)) { setCurrentModule('HOME') } }, [currentModule, currentRole]) if (status === 'loading') { return ( Chargement... ) } if (status === 'unauthenticated') return null const moduleInfo = modules.find((module) => module.id === currentModule) const moduleHeader = ( setCurrentModule('HOME')} className="flex items-center gap-2" > Retour a l'accueil {moduleInfo?.icon} {moduleInfo?.title} ) const renderModule = () => { if (currentModule === 'HOME') { return ( OptiqueStock Systeme de Gestion de Magasin d'Optique {visibleModules.map((module) => ( setCurrentModule(module.id)} > {module.icon} {module.badge && ( {module.badge} )} {module.title} {module.description} ))} ) } if (currentModule === 'CLIENTS') { return ( {moduleHeader} ) } if (currentModule === 'VENTE') { return ( {moduleHeader} ) } if (currentModule === 'PRODUITS') { return ( {moduleHeader} ) } if (currentModule === 'ATELIER') { return ( {moduleHeader} ) } if (currentModule === 'FOURNISSEURS') { return ( {moduleHeader} ) } if (currentModule === 'ACHATS') { return ( {moduleHeader} ) } if (currentModule === 'RAPPORTS') { return ( {moduleHeader} ) } if (currentModule === 'UTILISATEURS') { return ( {moduleHeader} ) } if (currentModule === 'IA') { return ( {moduleHeader} ) } if (currentModule === 'VENDEUR_WIZARD') { return ( {moduleHeader} ) } return null } return ( OptiqueStock Gestion de Magasin d'Optique {session?.user?.name} {currentRole} signOut({ redirect: false }).then(() => router.replace('/login'))} title="Se deconnecter" > {renderModule()} ) }
Chargement...
Systeme de Gestion de Magasin d'Optique
Gestion de Magasin d'Optique