import type { TicketTodo } from "./types"; function parseDateOnly(value: string) { const [year, month, day] = value.split("-").map(Number); return new Date(year, month - 1, day); } export function formatDateOnly(date: Date) { const year = date.getFullYear(); const month = String(date.getMonth() + 1).padStart(2, "0"); const day = String(date.getDate()).padStart(2, "0"); return `${year}-${month}-${day}`; } export function formatTodoDate(value: string) { return new Intl.DateTimeFormat("de-DE", { day: "2-digit", month: "2-digit", year: "numeric" }).format(parseDateOnly(value)); } export function formatTodoPeriod(todo: Pick) { if (!todo.starts_on && !todo.ends_on) { return null; } if (todo.starts_on && todo.ends_on && todo.starts_on === todo.ends_on) { return `am ${formatTodoDate(todo.starts_on)}`; } if (todo.starts_on && todo.ends_on) { return `${formatTodoDate(todo.starts_on)} - ${formatTodoDate(todo.ends_on)}`; } if (todo.starts_on) { return `ab ${formatTodoDate(todo.starts_on)}`; } return `bis ${formatTodoDate(todo.ends_on!)}`; } export function isTodoActiveOnDay(todo: Pick, day: string) { if (todo.status !== "open") { return false; } if (!todo.starts_on && !todo.ends_on) { return false; } return (!todo.starts_on || todo.starts_on <= day) && (!todo.ends_on || todo.ends_on >= day); } export function isTodoFixedOnDay(todo: Pick, day: string) { return todo.status === "open" && todo.starts_on === day && todo.ends_on === day; } export function isTodoOverdue(todo: Pick, today: string) { return todo.status === "open" && Boolean(todo.ends_on) && todo.ends_on! < today; }