export function formatTimeSlot(hour24: number, minute = 0): string {
  const period = hour24 >= 12 ? 'PM' : 'AM';
  const hour12 = hour24 % 12 || 12;
  return `${String(hour12).padStart(2, '0')}:${String(minute).padStart(2, '0')} ${period}`;
}

export function parseTimeToMinutes(value: string): number {
  const match = value.trim().match(/^(\d{1,2}):(\d{2})\s*(AM|PM)$/i);
  if (!match) return -1;

  let hour = parseInt(match[1], 10);
  const minute = parseInt(match[2], 10);
  const period = match[3].toUpperCase();

  if (period === 'PM' && hour !== 12) hour += 12;
  if (period === 'AM' && hour === 12) hour = 0;

  return hour * 60 + minute;
}

export function generateSlots(openTime: string, closeTime: string, intervalMinutes = 60): string[] {
  const [openH, openM] = openTime.split(':').map(Number);
  const [closeH, closeM] = closeTime.split(':').map(Number);

  let cursor = openH * 60 + (openM || 0);
  const end = closeH * 60 + (closeM || 0);
  const slots: string[] = [];

  while (cursor + intervalMinutes <= end) {
    const hour = Math.floor(cursor / 60);
    const minute = cursor % 60;
    slots.push(formatTimeSlot(hour, minute));
    cursor += intervalMinutes;
  }

  return slots;
}

export function toDateKey(date: Date): string {
  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}`;
}
