"use client"; import type { DeadlineReport } from "@/lib/types"; import Link from "next/link"; import { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer, Legend, } from "recharts"; import { CheckCircle, XCircle, Clock, AlertTriangle } from "lucide-react"; function formatMonth(period: string): string { const [year, month] = period.split("-"); const months = [ "Jan", "Feb", "Mär", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez", ]; return `${months[parseInt(month, 10) - 1]} ${year.slice(2)}`; } function formatDate(dateStr: string): string { const d = new Date(dateStr); return d.toLocaleDateString("de-DE", { day: "2-digit", month: "2-digit", year: "numeric", }); } export function DeadlinesTab({ data }: { data: DeadlineReport }) { const chartData = data.monthly.map((m) => ({ ...m, name: formatMonth(m.period), compliance_rate: Math.round(m.compliance_rate * 10) / 10, })); const complianceColor = data.total.compliance_rate >= 90 ? "text-emerald-600" : data.total.compliance_rate >= 70 ? "text-amber-600" : "text-red-600"; return (
{/* Summary cards */}
Gesamt

{data.total.total}

Eingehalten

{data.total.met}

Versäumt

{data.total.missed}

Einhaltungsquote

{data.total.compliance_rate.toFixed(1)}%

{/* Compliance rate over time */}

Fristeneinhaltung im Zeitverlauf

{chartData.length === 0 ? (

Keine Daten im gewählten Zeitraum

) : ( [`${value}%`, "Quote"]} /> )}
{/* Missed deadlines table */}

Versäumte Fristen

{data.missed.length === 0 ? (

Keine versäumten Fristen im gewählten Zeitraum

) : (
{data.missed.map((d) => ( ))}
Frist Akte Fällig am Tage überfällig
{d.title} {d.case_number} — {d.case_title} {formatDate(d.due_date)} {d.days_overdue}
)}
); }