import { API_ENDPOINTS } from '@/shared/constants/apiEndpoints';
import { api } from '@/shared/utils/api';
import {
  type AssigneePerformanceResponse,
  type DashboardOverview,
  type TicketTrends,
  isAssigneePerformanceResponse,
  isTicketTrendsResponse,
  parseDashboardOverview,
} from '@/features/dashboard/types/dashboard.types';

export async function fetchDashboardOverview(): Promise<DashboardOverview> {
  const raw: unknown = await api.get(API_ENDPOINTS.DASHBOARD.OVERVIEW);
  return parseDashboardOverview(raw);
}

export async function fetchDashboardTicketTrends(): Promise<TicketTrends> {
  const raw: unknown = await api.get(API_ENDPOINTS.DASHBOARD.TICKET_TRENDS);

  if (!isTicketTrendsResponse(raw)) {
    throw new Error('Invalid ticket trends response');
  }

  return raw;
}

export async function fetchDashboardAssigneePerformance(): Promise<AssigneePerformanceResponse> {
  const raw: unknown = await api.get(API_ENDPOINTS.DASHBOARD.ASSIGNEE_PERFORMANCE);

  if (!isAssigneePerformanceResponse(raw)) {
    throw new Error('Invalid assignee performance response');
  }

  return raw;
}
