import { Request } from 'express';

export interface JwtPayload {
  sub: string;
  role: UserRole;
  type: 'jwt' | 'apikey';
  iat?: number;
  exp?: number;
}

export type UserRole = 'admin' | 'api_reader' | 'sales_system' | 'external';

export interface AuthRequest extends Request {
  user?: JwtPayload;
}

export interface ApiResponse<T> {
  success: boolean;
  data?: T;
  meta?: PaginationMeta;
  error?: ApiError;
}

export interface PaginationMeta {
  page: number;
  limit: number;
  total: number;
  totalPages: number;
}

export interface ApiError {
  code: string;
  message: string;
  statusCode: number;
  details?: unknown;
}

export interface PaginationParams {
  page: number;
  limit: number;
  offset: number;
}
