/**
 * German date formatting for the SIS pages (dd.MM.yyyy HH:mm). Accepts ISO strings, Date
 * objects, epoch numbers and Amazon's report format "dd/mm/yyyy HH:mm:ss MET".
 */
const parseAny = (v: any): Date | null => {
  if (v == null || v === '') return null
  if (v instanceof Date) return Number.isNaN(v.getTime()) ? null : v
  if (typeof v === 'number') return new Date(v)
  const s = String(v).trim()
  const eu = s.match(/^(\d{2})\/(\d{2})\/(\d{4})(?:[ T](\d{2}):(\d{2})(?::(\d{2}))?)?/)
  if (eu) {
    let [, a, b, y, h, mi, se] = eu
    if (Number(b) > 12 && Number(a) <= 12) [a, b] = [b, a]
    return new Date(Number(y), Number(b) - 1, Number(a), Number(h || 0), Number(mi || 0), Number(se || 0))
  }
  const d = new Date(s)
  return Number.isNaN(d.getTime()) ? null : d
}

export const fmtDateTimeDe = (v: any): string => {
  const d = parseAny(v)
  return d ? d.toLocaleString('de-DE', { day: '2-digit', month: '2-digit', year: 'numeric', hour: '2-digit', minute: '2-digit' }) : ''
}

export const fmtDateDe = (v: any): string => {
  const d = parseAny(v)
  return d ? d.toLocaleDateString('de-DE', { day: '2-digit', month: '2-digit', year: 'numeric' }) : ''
}

export const fmtTimeDe = (v: any): string => {
  const d = parseAny(v)
  return d ? d.toLocaleTimeString('de-DE', { hour: '2-digit', minute: '2-digit', second: '2-digit' }) : ''
}
