'use strict';

var layers_BaseLayer = require('./BaseLayer.cjs');
var types_enums = require('../types/enums.cjs');

/**
 * 叠加图层（用于水印、字幕等）
 */
class OverlayLayer extends layers_BaseLayer.BaseLayer {
  constructor(config = {}) {
    super(config);
    this.type = types_enums.LayerType.OVERLAY;
    this.blendMode = config.blendMode || 'normal'; // normal, multiply, screen, overlay 等
  }

  /**
   * 设置混合模式
   */
  setBlendMode(mode) {
    this.blendMode = mode;
  }

  /**
   * 渲染叠加图层（使用 Paper.js）
   */
  async render(layer, time) {
    if (!this.isActiveAtTime(time)) return;

    // 渲染所有元素（可以应用混合模式）
    for (const element of this.elements) {
      if (element.visible) {
        try {
          // 在渲染之前先初始化元素（如果还未初始化）
          if (typeof element.isInitialized === 'function' && !element.isInitialized()) {
            if (typeof element.initialize === 'function') {
              const initResult = element.initialize();
              if (initResult && typeof initResult.then === 'function') {
                await initResult;
              }
            }
          }
          
          // Paper.js 的混合模式可以通过 blendMode 属性设置
          // 这里先渲染元素，混合模式可以在元素配置中设置
          const result = element.render(layer, time);
          if (result && typeof result.then === 'function') {
            await result;
          }
        } catch (error) {
          console.error(`渲染元素失败 (${element.type || 'unknown'}, id: ${element.id}):`, error);
        }
      }
    }
  }
}

exports.OverlayLayer = OverlayLayer;
//# sourceMappingURL=OverlayLayer.cjs.map
