// utils/queueManager.js

class QueueManager {
    constructor() {
        this._tasks = [];
        this._listenMap = {};
        this._timer = null;
        this._interval = 200;
    }

    // static get instance() {
    //     if (!QueueManager._instance) {
    //         QueueManager._instance = new QueueManager();
    //     }
    //     return QueueManager._instance;
    // }

    addTask(task) {
        // console.log(`QueueManager======addTask======${task}`);
        this._tasks.unshift(task);
        // console.log(`指令进队列：${task.toString()}, 数量：${this._tasks.length}`);
    }

    listenTask(callback) {
        // console.log(`QueueManager======listenTask======${callback.name || 'anonymous'}`);
        // this._listenMap[callback.name || 'anonymous'] = callback;

        if (!this._timer) {
            this._timer = setInterval(() => {
                if (this._tasks.length === 0) {
                    // console.log('QueueManager======execute======list empty');
                    return;
                }

                const last = this._tasks.pop();
                if (callback) {
                    callback(last);
                }
                // Object.keys(this._listenMap).forEach(key => {
                //     const value = this._listenMap[key];
                //     if (last.constructor.name === key || key === 'dynamic') {
                //         console.log(`QueueManager======listenTask======forEach===callback`);
                //         value(last);
                //     }
                // });

                // 不管有没有订阅，都移除掉
            }, this._interval);
        }
    }

    clear() {
//        console.log('QueueManager======clear======');
        if (this._tasks.length > 0) {
            this._tasks.length = 0;
        }
    }

    dispose() {
//        console.log('QueueManager======dispose======');
        this.clear();
        if (this._timer) {
            clearInterval(this._timer);
            this._timer = null;
        }
        this._listenMap = {};
    }
}

module.exports = QueueManager;