/**
 * Centralized date/time helpers.
 *
 * Prisma stores DateTime as UTC in MySQL DATETIME columns.
 * The Date.toJSON override in config/env.ts serializes using local getters,
 * so the frontend always receives local time. These helpers ensure
 * consistent local-time formatting whenever we need a string outside
 * of JSON serialization (e.g., building lookup keys, shift_date strings).
 */

/**
 * UTC midnight of the LOCAL calendar day of `d` (default: now).
 *
 * Prisma truncates a JS Date used against a `@db.Date` column (filter or
 * write) to its **UTC** date part. With TZ=Europe/Prague, a local-midnight
 * Date — `new Date(y, m, d)` — is 22:00/23:00 UTC of the PREVIOUS day, so it
 * filters/stores as the previous calendar date; and a bare `new Date()`
 * written to a `@db.Date` column stores yesterday during the 00:00–02:00
 * Prague window. Always build `@db.Date` values and range boundaries from
 * `Date.UTC(...)` of the LOCAL calendar components — this helper does exactly
 * that for "today" (or any reference Date).
 */
export function utcMidnightOfLocalDay(d: Date = new Date()): Date {
  return new Date(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate()));
}

/** YYYY-MM-DD in local time */
export function localDateStr(d: Date): string {
  const y = d.getFullYear();
  const m = String(d.getMonth() + 1).padStart(2, "0");
  const day = String(d.getDate()).padStart(2, "0");
  return `${y}-${m}-${day}`;
}

/** YYYY-MM in local time */
export function localMonthStr(d: Date): string {
  return `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, "0")}`;
}

/** HH:MM in local time */
export function localTimeStr(d: Date): string {
  return `${String(d.getHours()).padStart(2, "0")}:${String(d.getMinutes()).padStart(2, "0")}`;
}

/** DD.MM.YYYY in local time (Czech date format) */
export function localDateCzStr(d: Date): string {
  return `${String(d.getDate()).padStart(2, "0")}.${String(d.getMonth() + 1).padStart(2, "0")}.${d.getFullYear()}`;
}

/** DD.MM.YYYY HH:MM:SS in local time (Czech datetime format) */
export function localDateTimeCzStr(d: Date): string {
  const h = String(d.getHours()).padStart(2, "0");
  const min = String(d.getMinutes()).padStart(2, "0");
  const s = String(d.getSeconds()).padStart(2, "0");
  return `${localDateCzStr(d)} ${h}:${min}:${s}`;
}
