import axios from 'axios';

const API_BASE_URL = process.env.NODE_ENV === 'production' 
  ? '' 
  : 'http://localhost:5000';

const api = axios.create({
  baseURL: `${API_BASE_URL}/api`,
  headers: {
    'Content-Type': 'application/json',
  },
});

// Interceptor para tratamento de erros
api.interceptors.response.use(
  (response) => response,
  (error) => {
    console.error('Erro na API:', error);
    return Promise.reject(error);
  }
);

// === PRODUTOS ===
export const produtosAPI = {
  listar: () => api.get('/produtos'),
  criar: (produto) => api.post('/produtos', produto),
  criarComFoto: (formData) => {
    return api.post('/produtos', formData, {
      headers: {
        'Content-Type': 'multipart/form-data',
      },
    });
  },
  buscarPorId: (id) => api.get(`/produtos/${id}`),
  atualizar: (id, produto) => api.put(`/produtos/${id}`, produto),
  atualizarComFoto: (id, formData) => {
    return api.put(`/produtos/${id}`, formData, {
      headers: {
        'Content-Type': 'multipart/form-data',
      },
    });
  },
  deletar: (id) => api.delete(`/produtos/${id}`),
  
  // Variações
  listarVariacoes: (produtoId) => api.get(`/produtos/${produtoId}/variacoes`),
  adicionarVariacao: (produtoId, formData) => {
    return api.post(`/produtos/${produtoId}/variacoes`, formData, {
      headers: {
        'Content-Type': 'multipart/form-data',
      },
    });
  },
  atualizarVariacao: (produtoId, variacaoId, dados) => 
    api.put(`/produtos/${produtoId}/variacoes/${variacaoId}`, dados),
  deletarVariacao: (produtoId, variacaoId) => 
    api.delete(`/produtos/${produtoId}/variacoes/${variacaoId}`),
};

// === CLIENTES ===
export const clientesAPI = {
  listar: () => api.get('/clientes'),
  criar: (cliente) => api.post('/clientes', cliente),
  buscarPorId: (id) => api.get(`/clientes/${id}`),
  atualizar: (id, cliente) => api.put(`/clientes/${id}`, cliente),
  deletar: (id) => api.delete(`/clientes/${id}`),
};

// === FORNECEDORES ===
export const fornecedoresAPI = {
  listar: () => api.get('/fornecedores'),
  criar: (fornecedor) => api.post('/fornecedores', fornecedor),
  buscarPorId: (id) => api.get(`/fornecedores/${id}`),
  atualizar: (id, fornecedor) => api.put(`/fornecedores/${id}`, fornecedor),
  deletar: (id) => api.delete(`/fornecedores/${id}`),
};

// === DESPESAS ===
export const despesasAPI = {
  listar: () => api.get('/despesas'),
  criar: (despesa) => api.post('/despesas', despesa),
  buscarPorId: (id) => api.get(`/despesas/${id}`),
  atualizar: (id, despesa) => api.put(`/despesas/${id}`, despesa),
  deletar: (id) => api.delete(`/despesas/${id}`),
  
  // Tipos de despesas
  listarTipos: () => api.get('/tipos-despesas'),
  criarTipo: (tipo) => api.post('/tipos-despesas', tipo),
  deletarTipo: (id) => api.delete(`/tipos-despesas/${id}`),
};

// === VENDAS ===
export const vendasAPI = {
  listar: () => api.get('/vendas'),
  criar: (venda) => api.post('/vendas', venda),
  buscarPorId: (id) => api.get(`/vendas/${id}`),
  atualizar: (id, venda) => api.put(`/vendas/${id}`, venda),
  deletar: (id) => api.delete(`/vendas/${id}`),
  
  // Itens da venda
  adicionarItem: (vendaId, item) => api.post(`/vendas/${vendaId}/itens`, item),
  removerItem: (vendaId, itemId) => api.delete(`/vendas/${vendaId}/itens/${itemId}`),
};

// === DASHBOARD ===
export const dashboardAPI = {
  obterEstatisticas: () => api.get('/dashboard'),
};

export default api;
