(function (global) {
  global.ARQ = global.ARQ || {};
  ARQ.aiDerivedLayers = {
    /**
     * Inserta una capa imagen derivada de IA encima de las demás.
     * @param {{ dataUrl: string, nombre?: string, meta: object }} opts
     */
    insertDerivedLayer: function (opts) {
      var p = ARQ.store.getProject();
      var sheet = ARQ.utils.activeSheet(p);
      if (!sheet || !opts || !opts.dataUrl) return Promise.reject(new Error('Sin datos'));
      var dataUrl = opts.dataUrl;
      var im = new Image();
      return new Promise(function (resolve, reject) {
        im.onload = function () {
          ARQ.history.pushUndo();
          var z = ARQ.layers.maxZIndex(sheet) + 1;
          var nombre = opts.nombre || 'IA · capa';
          var layer = ARQ.layers.appendImageLayer(sheet, nombre, z);
          ARQ.assets.setLayerImageFromDataUrl(layer, dataUrl, im.width, im.height);
          layer.metadatos = layer.metadatos || {};
          layer.metadatos.ai = opts.meta || {};
          ARQ.store.setActiveLayerId(layer.id);
          ARQ.store.setDirty(true);
          ARQ.layers.renderPanel();
          ARQ.canvasEngine.redraw();
          ARQ.history.pushDescription('Capa IA');
          resolve(layer);
        };
        im.onerror = function () { reject(new Error('Imagen inválida')); };
        im.src = dataUrl;
      });
    },
  };
})(typeof window !== 'undefined' ? window : this);
