const API_BASE = '/api';

async function fetchApi(path, options = {}) {
  const res = await fetch(`${API_BASE}${path}`, {
    headers: { 'Content-Type': 'application/json', ...options.headers },
    ...options,
  });
  const json = await res.json();
  if (!json.success) {
    throw new Error(json.error ?? 'Error en la API');
  }
  return json.data;
}

export const api = {
  health: () => fetchApi('/health'),

  getOrganigrama: () => fetchApi('/organizacion'),
  getDepartamentos: () => fetchApi('/organizacion/departamentos'),
  getNiveles: () => fetchApi('/organizacion/niveles'),
  createNodo: (data) => fetchApi('/organizacion/nodos', { method: 'POST', body: JSON.stringify(data) }),
  updateNodo: (id, data) => fetchApi(`/organizacion/nodos/${id}`, { method: 'PUT', body: JSON.stringify(data) }),
  deleteNodo: (id) => fetchApi(`/organizacion/nodos/${id}`, { method: 'DELETE' }),

  getEncuestas: (departamentoId) =>
    fetchApi(departamentoId ? `/encuestas?departamento_id=${departamentoId}` : '/encuestas'),
  getEncuesta: (id) => fetchApi(`/encuestas/${id}`),
  getPlantilla: () => fetchApi('/encuestas/plantilla'),
  getEstadisticas: () => fetchApi('/encuestas/estadisticas'),
  createEncuesta: (data) => fetchApi('/encuestas', { method: 'POST', body: JSON.stringify(data) }),
  updateEncuesta: (id, data) => fetchApi(`/encuestas/${id}`, { method: 'PUT', body: JSON.stringify(data) }),
  deleteEncuesta: (id) => fetchApi(`/encuestas/${id}`, { method: 'DELETE' }),
  getRespuestas: (encuestaId) => fetchApi(`/encuestas/${encuestaId}/respuestas`),
  submitRespuesta: (encuestaId, data) =>
    fetchApi(`/encuestas/${encuestaId}/respuestas`, { method: 'POST', body: JSON.stringify(data) }),
};
