import { useState } from "react"; import { CheckSquare, Square, AlertTriangle, Calendar } from "lucide-react"; import type { TasksResponse, Task } from "../api"; interface TasksCardProps { data: TasksResponse; } type TabKey = "private" | "sams"; const TABS: { key: TabKey; label: string }[] = [ { key: "private", label: "Privat" }, { key: "sams", label: "Sam's" }, ]; function priorityIndicator(priority: number): { color: string; label: string } { if (priority <= 1) return { color: "bg-cherry", label: "Hoch" }; if (priority <= 2) return { color: "bg-gold", label: "Mittel" }; if (priority <= 3) return { color: "bg-azure", label: "Normal" }; return { color: "bg-base-500", label: "Niedrig" }; } function formatDueDate(iso: string | null): string | null { if (!iso) return null; try { const d = new Date(iso); if (isNaN(d.getTime())) return null; const now = new Date(); const diffDays = Math.ceil((d.getTime() - now.getTime()) / (1000 * 60 * 60 * 24)); if (diffDays < 0) return "Überfällig"; if (diffDays === 0) return "Heute"; if (diffDays === 1) return "Morgen"; return d.toLocaleDateString("de-DE", { day: "2-digit", month: "short" }); } catch { return null; } } export default function TasksCard({ data }: TasksCardProps) { const [activeTab, setActiveTab] = useState("private"); if (!data) return null; if (data.error) { return (

Aufgaben nicht verfügbar

Verbindung fehlgeschlagen

); } const group = activeTab === "private" ? data.private : data.sams; const tasks = group?.open ?? []; return (
{/* Header */}

Aufgaben

{/* Tabs */}
{TABS.map((tab) => { const tabGroup = tab.key === "private" ? data.private : data.sams; const openCount = tabGroup?.open_count ?? 0; const isActive = activeTab === tab.key; return ( ); })}
{/* Tasks */} {tasks.length === 0 ? (

Alles erledigt!

) : (
{tasks.map((task) => ( ))}
)}
); } function TaskItem({ task }: { task: Task }) { const p = priorityIndicator(task.priority); const due = formatDueDate(task.due_date); const isOverdue = due === "Überfällig"; return (
{task.done ? ( ) : ( )}

{task.title}

{task.project_name && ( {task.project_name} )} {due && ( {due} )}
); }