(function (global) {
  global.ARQ = global.ARQ || {};
  ARQ.aiChat = {
    init: function () {
      var self = this;
      $('#ai-goto-settings').on('click', function () {
        ARQ.router.go('settings');
      });
      $('#ai-send').on('click', function () { self.send(); });
      this.refreshGate();
    },
    refreshGate: function () {
      var apply = function (has) {
        $('#ai-gate').attr('hidden', has);
        $('#ai-chat-wrap').attr('hidden', !has);
      };
      if (ARQ.aiGate && ARQ.aiGate.refresh) {
        ARQ.aiGate.refresh().then(function (has) {
          apply(has);
        }).catch(function () {
          apply(false);
        });
      } else {
        ARQ.projects.openaiKeyStatus().then(function (r) {
          apply(r.success && r.hasKey);
        }).catch(function () {
          apply(false);
        });
      }
    },
    send: function () {
      var prompt = ($('#ai-prompt').val() || '').trim();
      if (!prompt) return;
      var $st = $('#ai-status');
      var $prev = $('#ai-preview');
      $st.text('Procesando…');
      $prev.empty();
      var extras = [];
      if ($('#ai-ctx-sheet').is(':checked')) {
        var c = ARQ.canvasEngine.getCanvas();
        if (c) extras.push('Contexto visual: composición actual adjunta implícitamente en prompt.');
      }
      if ($('#ai-ctx-materials').is(':checked')) {
        var p = ARQ.store.getProject();
        if (p && p.materiales && p.materiales.length) {
          extras.push('Materiales: ' + JSON.stringify(p.materiales.map(function (m) {
            return { hex: m.hex, material: m.nombre_material };
          })));
        }
      }
      var full = prompt + (extras.length ? '\n\n' + extras.join('\n') : '');
      ARQ.aiTransport.generateImage(full, {}).then(function (res) {
        if (!res.success) {
          if (res.code === 'NO_KEY') {
            $('#ai-gate').attr('hidden', false);
            $('#ai-chat-wrap').attr('hidden', true);
          }
          $st.text(res.error || 'Error');
          return;
        }
        var b64 = res.b64_json;
        var dataUrl = 'data:image/png;base64,' + b64;
        var img = new Image();
        img.onload = function () {
          $prev.empty().append(img);
          var btn = $('<button type="button" class="arq-btn arq-btn--primary"/>').text('Insertar como capa');
          btn.on('click', function () {
            ARQ.assets.insertIntoCanvas(dataUrl);
            var p = ARQ.store.getProject();
            if (p) {
              p.chat_ia = p.chat_ia || [];
              p.chat_ia.push({
                id: ARQ.utils.uuid(),
                prompt_usuario: prompt,
                respuesta: 'imagen generada',
                archivos_generados: [dataUrl.slice(0, 80) + '…'],
                fecha: ARQ.utils.nowIso(),
              });
              ARQ.store.setDirty(true);
            }
            var file = ARQ.aiChat._dataUrlToFile(dataUrl, 'ia_' + Date.now() + '.png');
            if (p && p.id) {
              ARQ.projects.uploadFile(p.id, 'ai', file);
            }
          });
          $prev.append(btn);
        };
        img.src = dataUrl;
        $st.text('Listo');
      }).catch(function () {
        $st.text('Error de red');
      });
    },
    _dataUrlToFile: function (dataUrl, name) {
      var arr = dataUrl.split(',');
      var mime = (arr[0].match(/:(.*?);/) || [])[1] || 'image/png';
      var bstr = atob(arr[1]);
      var n = bstr.length;
      var u8 = new Uint8Array(n);
      while (n--) u8[n] = bstr.charCodeAt(n);
      return new File([u8], name, { type: mime });
    },
  };
})(typeof window !== 'undefined' ? window : this);
