import type { TicketSlaTracking } from '@/features/tickets/types/sla.types';
import type { BadgeProps } from '@/shared/components/ui';
import type { StatusTone } from '@/styles/theme';

export function slaStatusTone(status: string): StatusTone {
  switch (status) {
    case 'breached':
      return 'breached';
    case 'warning':
      return 'warning';
    case 'met':
      return 'success';
    case 'paused':
      return 'paused';
    case 'active':
    default:
      return 'active';
  }
}

export function slaStatusBadgeVariant(status: string): BadgeProps['variant'] {
  switch (status) {
    case 'breached':
      return 'error';
    case 'warning':
      return 'warning';
    case 'met':
      return 'success';
    case 'paused':
      return 'gray';
    case 'active':
    default:
      return 'info';
  }
}

export function formatSlaDueDate(value: string | null, locale: string): string {
  if (!value) {
    return '—';
  }
  try {
    return new Intl.DateTimeFormat(locale === 'ar' ? 'ar' : 'en', {
      dateStyle: 'medium',
      timeStyle: 'short',
    }).format(new Date(value));
  } catch {
    return value;
  }
}

export function formatMinutesRemaining(minutes: number | null): string {
  if (minutes === null) {
    return '—';
  }
  if (minutes < 60) {
    return `${minutes}m`;
  }
  const hours = Math.floor(minutes / 60);
  const rest = minutes % 60;
  return rest > 0 ? `${hours}h ${rest}m` : `${hours}h`;
}

export function pickWorstSlaMetric(sla: TicketSlaTracking): 'response' | 'resolution' {
  if (sla.resolution.is_breached || sla.resolution.is_warning) {
    return 'resolution';
  }
  return 'response';
}
