import {Vector2 as Vector22} from "three/src/math/Vector2";
import {Color as Color2} from "three/src/math/Color";
import {NodeEvent as NodeEvent2} from "../../poly/NodeEvent";
import {CoreType} from "../../../core/Type";
const NODE_WIDTH_UNIT = 50;
export class UIData {
  constructor(node, x = 0, y = 0) {
    this.node = node;
    this._position = new Vector22();
    this._width = 50;
    this._color = new Color2(0.75, 0.75, 0.75);
    this._layout_vertical = true;
    this._json = {
      x: 0,
      y: 0
    };
    this._position.x = x;
    this._position.y = y;
  }
  width() {
    if (this._layout_vertical) {
      const available_inputs = this.node.io.inputs.max_inputs_count || 0;
      return Math.max(NODE_WIDTH_UNIT, NODE_WIDTH_UNIT * Math.ceil(available_inputs / 2));
    } else {
      return NODE_WIDTH_UNIT;
    }
  }
  setComment(comment) {
    this._comment = comment;
    this.node.emit(NodeEvent2.UI_DATA_COMMENT_UPDATED);
  }
  comment() {
    return this._comment;
  }
  setColor(color) {
    this._color = color;
  }
  color() {
    return this._color;
  }
  setLayoutHorizontal() {
    this._layout_vertical = false;
  }
  isLayoutVertical() {
    return this._layout_vertical;
  }
  copy(ui_data) {
    this._position.copy(ui_data.position());
    this._color.copy(ui_data.color());
  }
  position() {
    return this._position;
  }
  setPosition(new_position, y = 0) {
    if (CoreType.isNumber(new_position)) {
      const x = new_position;
      this._position.set(x, y);
    } else {
      this._position.copy(new_position);
    }
    this.node.emit(NodeEvent2.UI_DATA_POSITION_UPDATED);
  }
  translate(offset, snap = false) {
    this._position.add(offset);
    if (snap) {
      this._position.x = Math.round(this._position.x);
      this._position.y = Math.round(this._position.y);
    }
    this.node.emit(NodeEvent2.UI_DATA_POSITION_UPDATED);
  }
  toJSON() {
    this._json.x = this._position.x;
    this._json.y = this._position.y;
    this._json.comment = this._comment;
    return this._json;
  }
}
