/**
 * Standard API response structure for Follow Server
 * All API responses follow this consistent format
 */
export interface ResponseStruct<T = any> {
  /**
   * Response code
   * 0 = success
   * Non-zero = error code (matches ExceptionCodes)
   */
  code: number

  /**
   * Response message
   * Usually contains error message when code !== 0
   */
  message?: string

  /**
   * Response data payload
   * Contains actual response data when code === 0
   */
  data?: T
}

/**
 * Successful API response with data
 */
export interface SuccessResponse<T = any> extends ResponseStruct<T> {
  code: 0
  data: T
}

export type ExtractResponseData<T> = T extends ResponseStruct<infer U> ? U : never

/**
 * Error API response
 */
export interface ErrorResponse extends ResponseStruct<never> {
  code: number
  message: string
  data?: any
}

/**
 * Paginated response structure
 */
export interface PaginatedData<T = any> {
  items: T[]
  total: number
  page?: number
  limit?: number
  hasMore?: boolean
}

/**
 * Paginated API response
 */
export type PaginatedResponse<T = any> = SuccessResponse<PaginatedData<T>>

/**
 * Empty success response (for operations that don't return data)
 */
export type EmptyResponse = SuccessResponse<null>
