import { API_ENDPOINTS } from '@/shared/constants/apiEndpoints';
import { apiClient } from '@/shared/utils/api';
import {
  type TicketSlaTracking,
  isTicketSlaTracking,
} from '@/features/tickets/types/sla.types';

function parseSlaPayload(raw: unknown): TicketSlaTracking | null {
  if (isTicketSlaTracking(raw)) {
    return raw;
  }

  if (typeof raw === 'object' && raw !== null && 'data' in raw) {
    const inner = (raw as { data: unknown }).data;
    if (isTicketSlaTracking(inner)) {
      return inner;
    }
  }

  return null;
}

export async function fetchTicketSla(ticketId: string): Promise<TicketSlaTracking | null> {
  const response = await apiClient.get(API_ENDPOINTS.TICKETS.SLA(ticketId));
  const raw: unknown = response.data;

  if (typeof raw === 'object' && raw !== null && 'data' in raw && (raw as { data: unknown }).data === null) {
    return null;
  }

  const parsed = parseSlaPayload(raw);
  if (!parsed) {
    throw new Error('Invalid SLA tracking response');
  }

  return parsed;
}
