/**
 * 공용 API 타입 및 페이지네이션 유틸리티
 *
 * 25+ 개 action 파일에서 반복 정의되던 PaginatedResponse 타입과
 * 페이지네이션 변환 헬퍼를 하나로 통합합니다.
 */

// ===== API 페이지네이션 응답 (Laravel 표준) =====
export interface PaginatedApiResponse<T> {
  data: T[];
  current_page: number;
  last_page: number;
  per_page: number;
  total: number;
}

// ===== 프론트엔드 페이지네이션 메타 (camelCase) =====
export interface PaginationMeta {
  currentPage: number;
  lastPage: number;
  perPage: number;
  total: number;
}

// ===== 프론트엔드 페이지네이션 결과 =====
// 신규 코드용: executePaginatedAction 외부에서 transform 결과를 직접 조합할 때 사용
// (현재 직접 사용처 0건, 삭제 금지)
export interface PaginatedResult<T> {
  items: T[];
  pagination: PaginationMeta;
}

// ===== 페이지네이션 변환 헬퍼 =====
export function toPaginationMeta(
  data: { current_page?: number; last_page?: number; per_page?: number; total?: number } | undefined | null
): PaginationMeta {
  return {
    currentPage: data?.current_page || 1,
    lastPage: data?.last_page || 1,
    perPage: data?.per_page || 20,
    total: data?.total || 0,
  };
}

// ===== 셀렉트 옵션 (공용 룩업용) =====
export interface SelectOption {
  id: string;
  name: string;
}
