// core/RuntimeStore.js

class RuntimeStore {
    constructor() {
        // ۱. تلاش برای بارگذاری وضعیت‌های قبلی از حافظه مرورگر
        const savedState = localStorage.getItem('runtime_state');
        this.state = savedState ? JSON.parse(savedState) : {};

        // ۲. لیستی برای ذخیره "گوش‌دهندگان" به تغییرات
        this.listeners = {};
    }

    // متدی برای تغییر دادن یک وضعیت (مثلاً تغییر پروژه فعال)
    set(key, value) {
        this.state[key] = value;
        // ذخیره در localStorage برای اینکه با رفرش صفحه نپرد
        localStorage.setItem('runtime_state', JSON.stringify(this.state));

        // اطلاع دادن به تمام کسانی که منتظر تغییر این "کلید" خاص بودند
        this.notify(key, value);
    }

    // متدی برای گرفتن یک وضعیت خاص
    get(key) {
        return this.state[key];
    }

    // متدی برای اینکه سایر کامپوننت‌ها بگویند: "اگر کلیدِ X تغییر کرد، به من خبر بده"
    subscribe(key, callback) {
        if (!this.listeners[key]) this.listeners[key] = [];
        this.listeners[key].push(callback);
    }

    // متد داخلی برای خبررسانی
    notify(key, value) {
        if (this.listeners[key]) {
            this.listeners[key].forEach(callback => callback(value));
        }
    }
}

// ساخت یک نمونه (Instance) از این کلاس و صادرات آن
export const runtimeStore = new RuntimeStore();
