import { Response } from 'express';

export interface ApiResponse<T = any> {
  success: boolean;
  message: string;
  data?: T;
  meta?: {
    page?: number;
    limit?: number;
    total?: number;
    totalPages?: number;
    [key: string]: any;
  };
  error?: any;
}

export const sendSuccess = <T>(
  res: Response,
  message = 'Operation successful',
  data?: T,
  statusCode = 200,
  meta?: ApiResponse['meta']
): Response => {
  const responseBody: ApiResponse<T> = {
    success: true,
    message,
    data,
  };
  if (meta) {
    responseBody.meta = meta;
  }
  return res.status(statusCode).json(responseBody);
};

export const sendError = (
  res: Response,
  message = 'An unexpected error occurred',
  errorOrStatus: any = null,
  statusCode = 500
): Response => {
  const resolvedStatusCode = typeof errorOrStatus === 'number' ? errorOrStatus : statusCode;
  const error = typeof errorOrStatus === 'number' ? null : errorOrStatus;
  const responseBody: ApiResponse = {
    success: false,
    message,
  };
  if (error) {
    responseBody.error = error;
  }
  return res.status(resolvedStatusCode).json(responseBody);
};
