|
|
|
import { Dialog, DialogContent } from "@/components/ui/dialog"; |
|
import { useTranslation } from "@/hooks/useTranslation"; |
|
import { ExternalLink } from "lucide-react"; |
|
import { useQuery } from "@tanstack/react-query"; |
|
import { supabase } from "@/integrations/supabase/client"; |
|
|
|
export const StatsDialog = ({ |
|
open, |
|
onOpenChange, |
|
}: { |
|
open: boolean; |
|
onOpenChange: (open: boolean) => void; |
|
}) => { |
|
const t = useTranslation(); |
|
|
|
const { data: todayResults } = useQuery({ |
|
queryKey: ["game-results-today"], |
|
queryFn: async () => { |
|
const today = new Date(); |
|
today.setHours(0, 0, 0, 0); |
|
|
|
const { count } = await supabase |
|
.from("game_results") |
|
.select("*", { count: "exact" }) |
|
.gte("created_at", today.toISOString()); |
|
|
|
return count || 0; |
|
}, |
|
}); |
|
|
|
const { data: totalResults } = useQuery({ |
|
queryKey: ["game-results-total"], |
|
queryFn: async () => { |
|
const { count } = await supabase |
|
.from("game_results") |
|
.select("*", { count: "exact" }); |
|
|
|
return count || 0; |
|
}, |
|
}); |
|
|
|
return ( |
|
<Dialog open={open} onOpenChange={onOpenChange}> |
|
<DialogContent> |
|
<div className="space-y-4"> |
|
<div> |
|
<h3 className="font-semibold text-lg">{t.welcome.stats.title}</h3> |
|
</div> |
|
<div className="space-y-2"> |
|
<p> |
|
{t.welcome.stats.dailyGuesses}: {todayResults || 0} |
|
</p> |
|
<p> |
|
{t.welcome.stats.totalGuesses}: {totalResults || 0} |
|
</p> |
|
</div> |
|
<div> |
|
<a |
|
href="https://plausible.sonnenhof-zieger.de/think-in-sync.com" |
|
target="_blank" |
|
rel="noopener noreferrer" |
|
className="inline-flex items-center gap-2 text-primary hover:text-primary/80 transition-colors" |
|
> |
|
{t.welcome.stats.visitDashboard} |
|
<ExternalLink className="w-4 h-4" /> |
|
</a> |
|
</div> |
|
</div> |
|
</DialogContent> |
|
</Dialog> |
|
); |
|
}; |
|
|