/**
 * Utilitários para a camada de serviços (DAL).
 * Centraliza a lógica de alternância entre Mocks e API Real.
 */

// Define se o sistema deve usar mocks ou API real.
// Prioriza o .env, mas permite fallback para mock em desenvolvimento.
export const USE_MOCK = import.meta.env.VITE_USE_MOCK === 'true';

/**
 * Simula latência de rede para uma experiência mais realista com Mocks.
 * @param {any} data - Os dados que seriam retornados.
 * @param {number} ms - Tempo em milissegundos.
 */
export const simulateLatency = (data, ms = 800) => {
  console.log(`[MOCK] Simulating latency ${ms}ms for`, data);
  return new Promise((res) => setTimeout(() => res(data), ms));
};

/**
 * Helper para abstrair a decisão entre Mock e API.
 * @param {Object} options - Opções da requisição.
 * @param {Function} options.mockFn - Função que retorna o mock (deve retornar uma Promise).
 * @param {Function} options.apiFn - Função que faz a chamada real via Axios.
 */
export const handleRequest = async ({ mockFn, apiFn }) => {
  if (USE_MOCK && mockFn) {
    console.log('[Service] Using MOCK');
    return mockFn();
  }
  
  console.log('[Service] Calling API Real');
  
  try {
    const response = await apiFn();
    // Padroniza o retorno para sempre devolver os dados
    if (response === null || response === undefined) return null;
    return response.data !== undefined ? response.data : response;
  } catch (error) {
    console.error('API Error:', error);
    throw error;
  }
};
