/**
 * API error handling utilities for the application.
 * Provides centralized error handling for API requests with platform-specific logging.
 *
 * @module api
 */

import { AxiosError } from "axios";
import { logger, safeStringify } from "../utils/logger";

/**
 * Handles API errors with platform-specific logging and error processing.
 *
 * @param error - The Axios error object from the failed request
 * @param endpoint - The API endpoint that was called
 * @returns null for rate limit errors (400), throws the error otherwise
 * @throws The original error for non-rate-limit cases
 *
 * @remarks
 * Special handling includes:
 * - Enhanced logging for Capacitor platform
 * - Rate limit detection and handling
 * - Detailed error information logging including:
 *   - Error message
 *   - HTTP status
 *   - Response data
 *   - Request configuration (URL, method, headers)
 *
 * @example
 * ```typescript
 * try {
 *   await api.getData();
 * } catch (error) {
 *   handleApiError(error as AxiosError, '/api/data');
 * }
 * ```
 */
export const handleApiError = (error: AxiosError, endpoint: string) => {
  if (process.env.VITE_PLATFORM === "capacitor") {
    const endpointStr = safeStringify(endpoint); // we've seen this as an object in deep links
    logger.error(`[Capacitor API Error] ${endpointStr}:`, {
      message: error.message,
      status: error.response?.status,
      data: error.response?.data,
      config: {
        url: error.config?.url,
        method: error.config?.method,
        headers: error.config?.headers,
      },
    });
  }

  // Specific handling for rate limits
  if (error.response?.status === 400) {
    logger.warn(`[Rate Limit] ${endpoint}`);
    return null;
  }

  throw error;
};
