/**
 * EN: Standardized API response interface
 * VI: Interface phản hồi API chuẩn hóa
 */
export interface ApiResponse<T = any> {
  /** EN: Operation success status / VI: Trạng thái thành công của thao tác */
  success: boolean;
  /** EN: Response data payload / VI: Payload dữ liệu phản hồi */
  data?: T;
  /** EN: Success message / VI: Thông báo thành công */
  message?: string;
  /** EN: Error details (if failed) / VI: Chi tiết lỗi (nếu thất bại) */
  error?: ApiError;
  /** EN: Response timestamp / VI: Timestamp phản hồi */
  timestamp: string;
}

/**
 * EN: API error structure
 * VI: Cấu trúc lỗi API
 */
export interface ApiError {
  /** EN: Error code identifier / VI: Mã định danh lỗi */
  code: string;
  /** EN: Human-readable error message / VI: Thông báo lỗi dễ đọc */
  message: string;
  /** EN: Additional error details / VI: Chi tiết lỗi bổ sung */
  details?: Record<string, any>;
}

/**
 * EN: Paginated API response interface
 * VI: Interface phản hồi API có phân trang
 */
export interface PaginatedResponse<T> extends ApiResponse<T[]> {
  /** EN: Pagination metadata / VI: Metadata phân trang */
  pagination: {
    /** EN: Current page number / VI: Số trang hiện tại */
    page: number;
    /** EN: Items per page / VI: Số items mỗi trang */
    limit: number;
    /** EN: Total number of items / VI: Tổng số items */
    total: number;
    /** EN: Total number of pages / VI: Tổng số trang */
    totalPages: number;
  };
}

/**
 * EN: Query parameters for pagination and sorting
 * VI: Tham số query cho phân trang và sắp xếp
 */
export interface PaginationQuery {
  /** EN: Page number (1-based) / VI: Số trang (bắt đầu từ 1) */
  page?: number;
  /** EN: Items per page / VI: Số items mỗi trang */
  limit?: number;
  /** EN: Field to sort by / VI: Trường để sắp xếp */
  sortBy?: string;
  /** EN: Sort order / VI: Thứ tự sắp xếp */
  sortOrder?: 'asc' | 'desc';
}
