/* =========================================================================
   TikTok Comments — hook (se ejecuta en el MUNDO de la página)
   TikTok firma sus propias peticiones de comentarios; en vez de replicarlas,
   interceptamos fetch y XMLHttpRequest para leer las respuestas que la propia
   página ya recibe, y se las pasamos al content script vía postMessage.
   Este script NO tiene acceso a las APIs de la extensión (solo a la página).
   ========================================================================= */

(() => {
  if (window.__ttcHookInstalled) return;
  window.__ttcHookInstalled = true;

  const TAG = 'ttc-hook';
  const MARKER = '/api/comment/list/'; // ruta de comentarios (top-level y replies)

  const isCommentUrl = (u) => typeof u === 'string' && u.indexOf(MARKER) !== -1;
  const isReplyUrl = (u) => typeof u === 'string' && u.indexOf('/reply') !== -1;

  function emit(url, data) {
    try {
      window.postMessage(
        { source: TAG, kind: isReplyUrl(url) ? 'replies' : 'comments', url: url, data: data },
        '*'
      );
    } catch (e) {}
  }

  // ---- Hook de fetch ----
  const origFetch = window.fetch;
  if (origFetch) {
    window.fetch = function () {
      const args = arguments;
      const req = args[0];
      const url = typeof req === 'string' ? req : (req && req.url) || '';
      const promise = origFetch.apply(this, args);
      if (isCommentUrl(url)) {
        promise
          .then((res) => {
            try {
              res
                .clone()
                .json()
                .then((j) => emit(url, j))
                .catch(() => {});
            } catch (e) {}
          })
          .catch(() => {});
      }
      return promise;
    };
  }

  // ---- Hook de XMLHttpRequest ----
  const origOpen = XMLHttpRequest.prototype.open;
  const origSend = XMLHttpRequest.prototype.send;

  XMLHttpRequest.prototype.open = function (method, url) {
    this.__ttcUrl = url;
    return origOpen.apply(this, arguments);
  };

  XMLHttpRequest.prototype.send = function () {
    const url = this.__ttcUrl || '';
    if (isCommentUrl(url)) {
      this.addEventListener('load', function () {
        try {
          const j = JSON.parse(this.responseText);
          emit(url, j);
        } catch (e) {}
      });
    }
    return origSend.apply(this, arguments);
  };
})();
