const API_URL = 'https://custowhey.com.br/api/extension/compare';
const OBSERVATION_API_URL = 'https://custowhey.com.br/api/extension/observations';

chrome.runtime.onMessage.addListener((message, _sender, sendResponse) => {
  if (message?.type === 'CUSTOWHEY_OBSERVE') {
    fetch(OBSERVATION_API_URL, {
      method: 'POST',
      headers: { Accept: 'application/json', 'Content-Type': 'application/json' },
      body: JSON.stringify(message.observation ?? {}),
    })
      .then(async (response) => {
        const data = await response.json().catch(() => ({}));
        if (!response.ok) throw new Error(data.error || 'Contribuição indisponível.');
        sendResponse({ ok: true, ...data });
      })
      .catch((error) => sendResponse({ ok: false, error: error.message || 'Contribuição indisponível.' }));
    return true;
  }

  if (message?.type !== 'CUSTOWHEY_COMPARE') return false;

  const query = String(message.identity?.query ?? '').trim().slice(0, 120);
  if (query.length < 2) {
    sendResponse({ ok: false, error: 'Produto não identificado.' });
    return false;
  }

  const params = new URLSearchParams({ q: query });
  const identity = message.identity ?? {};
  if (identity.brand) params.set('brand', String(identity.brand).slice(0, 80));
  if (identity.gtin) params.set('gtin', String(identity.gtin).slice(0, 14));
  if (identity.packageWeightGrams) params.set('weight', String(identity.packageWeightGrams));
  if (identity.productType) params.set('type', String(identity.productType).slice(0, 30));

  fetch(`${API_URL}?${params}`, {
    headers: { Accept: 'application/json' },
  })
    .then(async (response) => {
      const data = await response.json().catch(() => ({}));
      if (!response.ok) throw new Error(data.error || 'Comparação indisponível.');
      sendResponse({ ok: true, comparisons: data.comparisons ?? [] });
    })
    .catch((error) => sendResponse({ ok: false, error: error.message || 'Comparação indisponível.' }));

  return true;
});
