import { ModelData } from '../model-data';
/**
 * 粘贴板控制器
 *
 * @export
 * @class ModelClipboardController
 */
export class ModelClipboardController {
    /**
     * Creates an instance of ModelClipboardController.
     * @memberof ModelClipboardController
     */
    constructor() {
        /**
         * 拖拽配置
         *
         * @type {*}
         * @memberof ModelClipboardController
         */
        this.draggableOption = {
            noPutGroup: {
                name: 'StudioDesign',
                pull: 'clone',
                put: false,
            },
            group: {
                name: 'StudioDesign',
            },
        };
        /**
         * 缓存识别码
         *
         * @private
         * @type {string}
         * @memberof ModelClipboardController
         */
        this.localStorageKey = 'ModelClipboardCache';
        /**
         * 是否显示粘贴板
         *
         * @type {boolean}
         * @memberof ModelClipboardController
         */
        this.isShowModelClipboard = false;
        /**
         * 当前放置到剪贴板数据
         *
         * @type {ModelData[]}
         * @memberof ModelClipboardController
         */
        this.items = [];
        if (ModelClipboardController.instance) {
            return ModelClipboardController.instance;
        }
        this.init();
    }
    /**
     * 初始化
     *
     * @private
     * @memberof ModelClipboardController
     */
    init() {
        const items = window.localStorage.getItem(this.localStorageKey);
        try {
            if (items) {
                this.items = JSON.parse(items);
            }
        }
        catch (err) {
            console.error(err);
        }
    }
    /**
     * 新建模型至剪贴板
     *
     * @param {{ title: string, srfDeName: string, srfParentData?: any, items: any[] }} data
     * @memberof ModelClipboardController
     */
    createdItem(data) {
        this.setItem(new ModelData(data));
        this.showChange(true);
    }
    /**
     *
     *
     * @param {ModelData} data
     * @memberof ModelClipboardController
     */
    setItem(data) {
        this.items.splice(0, 0, data);
        this.saveToStore();
    }
    /**
     * 改变粘贴板显示状态
     *
     * @param {boolean} [bool]
     * @memberof ModelClipboard
     */
    showChange(bool) {
        if (bool !== undefined) {
            this.isShowModelClipboard = bool;
        }
        else {
            this.isShowModelClipboard = !this.isShowModelClipboard;
        }
    }
    /**
     * 存储数据至缓存
     *
     * @memberof ModelClipboardController
     */
    saveToStore() {
        try {
            localStorage.setItem(this.localStorageKey, JSON.stringify(this.items));
        }
        catch (err) {
            console.error(err);
        }
    }
    /**
     * 根据下标删除数据
     *
     * @param {number} i
     * @memberof ModelClipboardController
     */
    removeByIndex(i) {
        this.items.splice(i, 1);
        this.saveToStore();
    }
    /**
     * 清除所有
     *
     * @memberof ModelClipboardController
     */
    clearAll() {
        this.items = [];
        localStorage.removeItem(this.localStorageKey);
    }
    /**
     * 获取实例
     *
     * @static
     * @returns {ModelClipboardController}
     * @memberof ModelClipboardController
     */
    static getInstance() {
        return this.instance;
    }
}
/**
 * 唯一实例
 *
 * @private
 * @static
 * @type {ModelClipboardController}
 * @memberof ModelClipboardController
 */
ModelClipboardController.instance = new ModelClipboardController();
