/**
 * Unified API response format.
 * Per nest.md: { success, message, data, extra_data }
 */
export interface ApiResponse<T = unknown> {
  success: boolean;
  message: string;
  data: T | null;
  extra_data: unknown[];
}

export function successResponse<T>(
  data: T | null = null,
  message = 'Success',
  extra_data: unknown[] | unknown = [],
): ApiResponse<T> {
  return { success: true, message, data, extra_data: Array.isArray(extra_data) ? extra_data : [extra_data] };
}

/**
 * Paginated success response — puts meta in extra_data[0].
 */
export function paginatedResponse<T>(
  items: T[],
  meta: { total: number; page: number; limit: number; totalPages: number },
  message = 'Fetched successfully',
): ApiResponse<T[]> {
  return { success: true, message, data: items, extra_data: [{ pagination: meta }] };
}

export function errorResponse(
  message = 'Something went wrong',
  extra_data: unknown[] = [],
): ApiResponse<null> {
  return { success: false, message, data: null, extra_data };
}
