import { Header } from "@/components/layout/Header";
import { Footer } from "@/components/layout/Footer";
import { Button } from "@/components/ui/button";
import {
Card,
CardContent,
CardDescription,
CardFooter,
CardHeader,
CardTitle,
} from "@/components/ui/card";
import { PageLoader } from "@/components/ui/loading-spinner";
import useAuth from "@/hooks/useAuth";
import useDashboardStats from "@/hooks/useDashboardStats";
import { useNavigate, Link } from "react-router-dom";
import { useEffect } from "react";
import {
CalendarIcon,
MessageSquareIcon,
BriefcaseIcon,
ChevronRightIcon,
UserCircleIcon,
UsersIcon,
} from "lucide-react";
import ArtisanStats from "@/components/dashboard/ArtisanStats";
const DashboardStats = () => {
const { isArtisan } = useAuth();
if (!isArtisan) return null;
return ;
};
const Dashboard = () => {
const { currentUser, userData, isLoading, isClient, isArtisan } = useAuth();
const navigate = useNavigate();
const { activeProjects, artisansContacted, messagesNonLus, totalClients, acceptanceRate } = useDashboardStats();
useEffect(() => {
if (!isLoading && !currentUser) {
navigate("/auth?mode=login");
}
}, [currentUser, isLoading, navigate]);
if (isLoading) {
return ;
}
if (!currentUser || !userData) {
return null;
}
const statCards = isClient
? [
{ label: "Projets en cours", value: activeProjects.toString(), icon: },
{ label: "Artisans contactés", value: artisansContacted.toString(), icon: },
{ label: "Messages non lus", value: messagesNonLus.toString(), icon: },
]
: [
{ label: "Projets en cours", value: activeProjects.toString(), icon: },
{ label: "Clients actifs", value: totalClients.toString(), icon: },
{ label: "Taux d'acceptation", value: `${acceptanceRate}%`, icon: },
];
const dashboardItems = isClient
? [
{
icon: ,
color: "bg-blue-100 text-blue-600",
title: "Mes projets",
description: "Gérez tous vos projets en cours et passés",
link: "/projects",
},
{
icon: ,
color: "bg-green-100 text-green-600",
title: "Messages",
description: "Consultez vos conversations avec les artisans",
link: "/messages",
},
{
icon: ,
color: "bg-purple-100 text-purple-600",
title: "Rendez-vous",
description: "Gérez votre calendrier de rendez-vous",
link: "/appointments",
},
{
icon: ,
color: "bg-amber-100 text-amber-600",
title: "Mes artisans",
description: "Liste de vos artisans favoris",
link: "/my-artisans",
},
]
: [
{
icon: ,
color: "bg-blue-100 text-blue-600",
title: "Mes chantiers",
description: "Gérez vos projets en cours et propositions",
link: "/projects",
},
{
icon: ,
color: "bg-green-100 text-green-600",
title: "Messages",
description: "Consultez vos conversations avec les clients",
link: "/messages",
},
{
icon: ,
color: "bg-purple-100 text-purple-600",
title: "Planning",
description: "Gérez votre calendrier et disponibilités",
link: "/planning",
},
];
return (
Bienvenue, {userData.displayName}
{isClient
? "Gérez vos projets et trouvez les meilleurs artisans"
: "Gérez vos chantiers et développez votre activité"}
{statCards.map((stat, index) => (
{stat.label}
{stat.value}
{stat.icon}
))}
{dashboardItems.map((item, index) => (
{item.icon}
{item.title}
{item.description}
))}
{!isClient && }
Complétez votre profil !
{isClient
? "Ajoutez vos préférences et détails pour trouver les artisans idéaux"
: "Ajoutez vos compétences et réalisations pour attirer plus de clients"}
{!isClient && (
Portfolio
Présentez vos réalisations pour attirer de nouveaux clients
Un portfolio bien rempli augmente de 70% vos chances d'être contacté par un client.