"use client"; import { useMemo } from "react"; import { useLiveQuery } from "dexie-react-hooks"; import { Activity, Brain, CheckCircle, PenTool } from "lucide-react"; import { Bar, BarChart, CartesianGrid, Legend, Line, LineChart, ResponsiveContainer, Tooltip, XAxis, YAxis, } from "recharts"; import { db, type Journal, type Task } from "@/lib/db"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; const EMPTY_JOURNALS: Journal[] = []; const EMPTY_TASKS: Task[] = []; const moodScores: Record = { happy: 4, neutral: 3, sad: 2, angry: 1, }; export default function DashboardPage() { const liveJournals = useLiveQuery(() => db.journals.orderBy("date").toArray(), ); const liveTasks = useLiveQuery(() => db.tasks.toArray()); const journals = liveJournals ?? EMPTY_JOURNALS; const tasks = liveTasks ?? EMPTY_TASKS; const pendingTasksCount = tasks.filter((task) => task.status === "todo").length; const today = new Date().toISOString().split("T")[0]; const todaysJournal = journals.find((journal) => journal.date === today); const todaysEnergy = todaysJournal ? todaysJournal.energy : "--"; const trendData = useMemo(() => { const dataMap: Record< string, { date: string; moodSum: number; energySum: number; count: number } > = {}; journals.forEach((journal) => { if (!dataMap[journal.date]) { dataMap[journal.date] = { date: journal.date, moodSum: 0, energySum: 0, count: 0, }; } dataMap[journal.date].moodSum += moodScores[journal.mood] || 3; dataMap[journal.date].energySum += journal.energy; dataMap[journal.date].count += 1; }); return Object.values(dataMap) .map((entry) => ({ date: entry.date.slice(5), Mood: Number((entry.moodSum / entry.count).toFixed(1)), Enerji: Number((entry.energySum / entry.count).toFixed(1)), })) .slice(-7); }, [journals]); const tagData = useMemo(() => { const counts: Record = {}; journals.forEach((journal) => { journal.ai_tags?.forEach((tag) => { counts[tag] = (counts[tag] || 0) + 1; }); }); return Object.entries(counts) .map(([name, value]) => ({ name, Değer: value })) .sort((a, b) => b.Değer - a.Değer) .slice(0, 5); }, [journals]); const lastInsight = [...journals] .reverse() .find((journal) => journal.ai_summary)?.ai_summary; return (

Bugün Nasılsın?

Kişisel özetin ve yapay zeka analizlerin burada görünecek.

Günlük Kayıtları
{journals.length}

{journals.length === 0 ? "Henüz kayıt girilmedi" : "Toplam kayıt eklendi"}

Aktif Görevler
{pendingTasksCount}

Bekleyen görev

Bugünkü Enerji
{todaysEnergy}

{todaysJournal ? "/ 5 seviyesinde" : "Kayıt bekleniyor"}

Local AI Durumu
Hazır

Ollama / Veri bekliyor

Ruh Hali ve Enerji Trendi

Son 7 günlük ortalamalar (1-5 arası puanlama)

{trendData.length > 0 ? ( ) : (

Veri bekleniyor...

)}

AI Konu Dağılımı

Günlüklerinden çıkarılan en sık 5 etiket

{tagData.length > 0 ? ( ) : (

Yeterli etiket yok.

)}

Son AI İçgörüsü

{lastInsight ? `"${lastInsight}"` : "Henüz bir içgörü oluşmadı. Biraz günlük yaz, AI analiz yapsın."}

); }