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, useMemo } from "react";
import {
CalendarIcon,
MessageSquareIcon,
BriefcaseIcon,
UsersIcon,
Wrench,
FileText,
Search,
TrendingUp,
ImageIcon,
CalendarDays,
ArrowRight,
Sparkles,
CheckCircle2,
} from "lucide-react";
import { motion } from "framer-motion";
import { cn } from "@/lib/utils";
import { ActivityAreaChart, ActivityBarChart, RadialPercent } from "@/components/dashboard/DashboardCharts";
import { PremiumStatCard } from "@/components/dashboard/PremiumStatCard";
import { format } from "date-fns";
import { fr } from "date-fns/locale";
const fadeUp = (delay = 0) => ({
initial: { opacity: 0, y: 18 },
animate: { opacity: 1, y: 0 },
transition: { duration: 0.45, delay, ease: "easeOut" },
});
const Dashboard = () => {
const { currentUser, userData, isLoading, isClient, isArtisan } = useAuth();
const navigate = useNavigate();
const stats = useDashboardStats();
useEffect(() => {
if (!isLoading && !currentUser) {
navigate("/auth?mode=login");
}
}, [currentUser, isLoading, navigate]);
const areaData = useMemo(
() =>
["Jan", "Fév", "Mar", "Avr", "Mai", "Juin"].map((label, i) => ({
label,
value: Math.max(
1,
(stats.activeProjects || 0) +
i * 2 +
(isArtisan ? stats.totalClients : stats.artisansContacted)
),
})),
[stats.activeProjects, stats.totalClients, stats.artisansContacted, isArtisan]
);
const barData = useMemo(
() =>
["Lun", "Mar", "Mer", "Jeu", "Ven", "Sam", "Dim"].map((label, i) => ({
label,
value: Math.max(0, 2 + ((i + (stats.unreadMessages || 0)) % 7)),
})),
[stats.unreadMessages]
);
if (isLoading || stats.isLoading) {
return
{isClient ? "Gérez vos projets et trouvez les meilleurs artisans près de chez vous." : "Gérez vos chantiers et développez votre activité artisanale."}
6 derniers mois
Devis acceptés
Cette semaine
Cette semaine
{item.title}
{item.desc}
Aucune activité récente pour le moment.
) : ({activity.title}
{activity.type}