// SimplifiedUI.js - 简化版UI系统API
import { UIElement, UIButton, UILabel, UIImage, UISlider, UIManager } from './UI.js';

/**
 * 简化版UI管理器
 * 参考PixiJS、Egret和Vue 3的设计理念
 */
class SimplifiedUIManager extends UIManager {
  constructor(engine) {
    super(engine);
    
    // 创建简化API的快捷方法
    this._createSimplifiedAPI();
  }
  
  /**
   * 创建简化API的快捷方法
   */
  _createSimplifiedAPI() {
    // 简化的UI元素创建API
    this.create = this._createUI.bind(this);
    
    // 简化的UI元素添加API
    this.add = this._addElement.bind(this);
    
    // 简化的UI元素移除API
    this.remove = this._removeElement.bind(this);
  }
  
  /**
   * 简化的UI元素创建API
   * @param {string} type - UI元素类型 ('button', 'label', 'image', 'slider')
   * @param {object} options - UI元素选项
   * @returns {UIElement} UI元素
   */
  _createUI(type, options = {}) {
    switch (type.toLowerCase()) {
      case 'button':
        return new SimplifiedButton(options);
      case 'label':
        return new SimplifiedLabel(options);
      case 'image':
        return new SimplifiedImage(options);
      case 'slider':
        return new SimplifiedSlider(options);
      default:
        throw new Error(`Unsupported UI type: ${type}`);
    }
  }
  
  /**
   * 简化的UI元素添加API
   * @param {UIElement} element - UI元素
   * @returns {UIManager} UI管理器实例
   */
  _addElement(element) {
    return this.addElement(element);
  }
  
  /**
   * 简化的UI元素移除API
   * @param {UIElement} element - UI元素
   * @returns {UIManager} UI管理器实例
   */
  _removeElement(element) {
    return this.removeElement(element);
  }
}

/**
 * 简化版按钮类
 */
class SimplifiedButton extends UIButton {
  constructor(options = {}) {
    super(
      options.x || 0,
      options.y || 0,
      options.width || 100,
      options.height || 50,
      options.text || ''
    );
    
    // 应用样式
    if (options.style) {
      this._applyStyle(options.style);
    }
    
    // 应用事件
    if (options.events) {
      this._applyEvents(options.events);
    }
  }
  
  /**
   * 应用样式
   * @param {object} style - 样式对象
   */
  _applyStyle(style) {
    if (style.backgroundColor) this.setBackgroundColor(style.backgroundColor);
    if (style.hoverColor) this.setHoverColor(style.hoverColor);
    if (style.pressedColor) this.setPressedColor(style.pressedColor);
    if (style.textColor) this.setTextColor(style.textColor);
    if (style.fontSize) this.setFontSize(style.fontSize);
    if (style.fontFamily) this.setFontFamily(style.fontFamily);
  }
  
  /**
   * 应用事件
   * @param {object} events - 事件对象
   */
  _applyEvents(events) {
    Object.keys(events).forEach(event => {
      this.on(event, events[event]);
    });
  }
  
  /**
   * 简化的链式调用方法
   */
  position(x, y) {
    this.setPosition(x, y);
    return this;
  }
  
  size(width, height) {
    this.setSize(width, height);
    return this;
  }
  
  text(text) {
    this.setText(text);
    return this;
  }
  
  background(color) {
    this.setBackgroundColor(color);
    return this;
  }
  
  hover(color) {
    this.setHoverColor(color);
    return this;
  }
  
  pressed(color) {
    this.setPressedColor(color);
    return this;
  }
  
  color(color) {
    this.setTextColor(color);
    return this;
  }
  
  font(size, family) {
    if (size) this.setFontSize(size);
    if (family) this.setFontFamily(family);
    return this;
  }
  
  on(event, callback) {
    super.on(event, callback);
    return this;
  }
}

/**
 * 简化版标签类
 */
class SimplifiedLabel extends UILabel {
  constructor(options = {}) {
    super(
      options.x || 0,
      options.y || 0,
      options.text || ''
    );
    
    // 应用样式
    if (options.style) {
      this._applyStyle(options.style);
    }
  }
  
  /**
   * 应用样式
   * @param {object} style - 样式对象
   */
  _applyStyle(style) {
    if (style.font) this.setFont(style.font);
    if (style.color) this.setColor(style.color);
    if (style.align) this.setAlign(style.align);
    if (style.backgroundColor) this.setBackgroundColor(style.backgroundColor);
  }
  
  /**
   * 简化的链式调用方法
   */
  position(x, y) {
    this.setPosition(x, y);
    return this;
  }
  
  text(text) {
    this.setText(text);
    return this;
  }
  
  font(font) {
    this.setFont(font);
    return this;
  }
  
  color(color) {
    this.setColor(color);
    return this;
  }
  
  align(align) {
    this.setAlign(align);
    return this;
  }
  
  background(color) {
    this.setBackgroundColor(color);
    return this;
  }
}

/**
 * 简化版图像类
 */
class SimplifiedImage extends UIImage {
  constructor(options = {}) {
    super(
      options.x || 0,
      options.y || 0,
      options.width || 0,
      options.height || 0
    );
    
    // 设置图像源
    if (options.src) {
      this.setSrc(options.src);
    }
    
    // 应用样式
    if (options.style) {
      this._applyStyle(options.style);
    }
  }
  
  /**
   * 应用样式
   * @param {object} style - 样式对象
   */
  _applyStyle(style) {
    if (style.border) this.setBorder(style.border);
    if (style.borderRadius) this.setBorderRadius(style.borderRadius);
  }
  
  /**
   * 简化的链式调用方法
   */
  position(x, y) {
    this.setPosition(x, y);
    return this;
  }
  
  size(width, height) {
    this.setSize(width, height);
    return this;
  }
  
  src(src) {
    this.setSrc(src);
    return this;
  }
  
  border(border) {
    this.setBorder(border);
    return this;
  }
  
  radius(radius) {
    this.setBorderRadius(radius);
    return this;
  }
}

/**
 * 简化版滑块类
 */
class SimplifiedSlider extends UISlider {
  constructor(options = {}) {
    super(
      options.x || 0,
      options.y || 0,
      options.width || 200,
      options.height || 20,
      options.min || 0,
      options.max || 100,
      options.value || 0
    );
    
    // 应用样式
    if (options.style) {
      this._applyStyle(options.style);
    }
    
    // 应用事件
    if (options.events) {
      this._applyEvents(options.events);
    }
  }
  
  /**
   * 应用样式
   * @param {object} style - 样式对象
   */
  _applyStyle(style) {
    if (style.trackColor) this.setTrackColor(style.trackColor);
    if (style.thumbColor) this.setThumbColor(style.thumbColor);
  }
  
  /**
   * 应用事件
   * @param {object} events - 事件对象
   */
  _applyEvents(events) {
    Object.keys(events).forEach(event => {
      this.on(event, events[event]);
    });
  }
  
  /**
   * 简化的链式调用方法
   */
  position(x, y) {
    this.setPosition(x, y);
    return this;
  }
  
  size(width, height) {
    this.setSize(width, height);
    return this;
  }
  
  range(min, max) {
    this.setMin(min);
    this.setMax(max);
    return this;
  }
  
  value(val) {
    this.setValue(val);
    return this;
  }
  
  track(color) {
    this.setTrackColor(color);
    return this;
  }
  
  thumb(color) {
    this.setThumbColor(color);
    return this;
  }
  
  on(event, callback) {
    super.on(event, callback);
    return this;
  }
}

// 导出简化版UI类
export { SimplifiedUIManager, SimplifiedButton, SimplifiedLabel, SimplifiedImage, SimplifiedSlider };