import { apiRequest } from './utils.js';
import CONFIG from '../config.js';

const { defaultCustomerId } = CONFIG.app;

// ── Assets ───────────────────────────────────────────────────────────────────

export async function getAsset(id) {
  const data = await apiRequest('GET', `/asset/${id}`, null, {}, { base: '/api' });
  return data.asset ?? data;
}

export async function searchAssets(query) {
  const data = await apiRequest('GET', '/asset/search', null, {
    query,
    per_page: 10,
  }, { base: '/api' });
  return data.assets ?? data.customer_assets ?? [];
}

export async function updateAsset(id, fields, customerId) {
  // Routes through Node.js cache layer (/api/) which invalidates the server cache
  // and forwards to Syncro. customer_id is used server-side for cache invalidation only.
  const data = await apiRequest('PUT', `/customer_assets/${id}`, { asset: fields, customer_id: customerId }, {}, { base: '/api' });
  return data.asset ?? data;
}

// ── Contacts ─────────────────────────────────────────────────────────────────

// Fetches via Node.js server cache — server handles pagination internally
export async function getContacts(customerId = defaultCustomerId) {
  const res = await fetch(`/api/contacts/${customerId}`, {
    credentials: 'same-origin',
    headers: { Accept: 'application/json' },
  });
  if (!res.ok) throw new Error(`HTTP ${res.status}`);
  const data = await res.json();
  return data.contacts ?? [];
}

// ── Customers ────────────────────────────────────────────────────────────────

// Fetches via Node.js server cache — server handles pagination internally
export async function getCustomers() {
  const res = await fetch('/api/customers', {
    credentials: 'same-origin',
    headers: { Accept: 'application/json' },
  });
  if (!res.ok) throw new Error(`HTTP ${res.status}`);
  const data = await res.json();
  return data.customers ?? [];
}

export async function getCustomerAssets(customerId) {
  const res = await fetch(`/api/customer_assets/${customerId}`, {
    credentials: 'same-origin',
    headers: { Accept: 'application/json' },
  });
  if (!res.ok) throw new Error(`HTTP ${res.status}`);
  const data = await res.json();
  return data.assets ?? [];
}

// ── Tickets ──────────────────────────────────────────────────────────────────

export async function getTickets(customerId = defaultCustomerId) {
  const data = await apiRequest('GET', '/tickets', null, {
    customer_id: customerId,
    per_page: 100,   // fetch enough to filter client-side by contact
  });
  return data.tickets ?? [];
}
