/**
 * سیستم Cache ساده برای بهبود Performance
 */

class SimpleCache {
    constructor(ttl = 300000) { // 5 دقیقه پیش‌فرض
        this.cache = new Map();
        this.ttl = ttl;
        this.timers = new Map();
    }

    // قرار دادن داده در cache
    set(key, value, customTTL = null) {
        const ttl = customTTL || this.ttl;
        
        // حذف timer قبلی اگر وجود داشت
        if (this.timers.has(key)) {
            clearTimeout(this.timers.get(key));
        }

        // قرار دادن در cache
        this.cache.set(key, {
            value: value,
            timestamp: Date.now()
        });

        // تنظیم timer برای حذف خودکار
        const timer = setTimeout(() => {
            this.delete(key);
        }, ttl);

        this.timers.set(key, timer);
    }

    // دریافت داده از cache
    get(key) {
        const item = this.cache.get(key);
        if (!item) {
            return null;
        }

        // بررسی اینکه آیا منقضی شده یا نه
        if (Date.now() - item.timestamp > this.ttl) {
            this.delete(key);
            return null;
        }

        return item.value;
    }

    // حذف داده از cache
    delete(key) {
        this.cache.delete(key);
        if (this.timers.has(key)) {
            clearTimeout(this.timers.get(key));
            this.timers.delete(key);
        }
    }

    // پاکسازی کامل cache
    clear() {
        this.timers.forEach(timer => clearTimeout(timer));
        this.timers.clear();
        this.cache.clear();
    }

    // بررسی وجود کلید
    has(key) {
        return this.cache.has(key) && this.get(key) !== null;
    }

    // دریافت تعداد آیتم‌های cache
    size() {
        return this.cache.size;
    }

    // پاکسازی آیتم‌های منقضی شده
    cleanup() {
        const now = Date.now();
        for (const [key, item] of this.cache.entries()) {
            if (now - item.timestamp > this.ttl) {
                this.delete(key);
            }
        }
    }
}

// Cache instances برای موارد مختلف
const userStatsCache = new SimpleCache(60000); // 1 دقیقه برای stats
const taskCache = new SimpleCache(30000); // 30 ثانیه برای tasks
const patternsCache = new SimpleCache(120000); // 2 دقیقه برای patterns

// پاکسازی دوره‌ای cache (هر 5 دقیقه)
setInterval(() => {
    userStatsCache.cleanup();
    taskCache.cleanup();
    patternsCache.cleanup();
}, 5 * 60 * 1000);

module.exports = {
    SimpleCache,
    userStatsCache,
    taskCache,
    patternsCache
};

