/**
 * سیستم گیمیفیکیشن و انگیزشی پیشرفته
 */
const fs = require('fs');
const path = require('path');
const { calculatePerformanceScore, detectBehavioralPatterns } = require('./analytics');

const GAMIFICATION_FILE = 'gamification.json';

// بارگذاری داده‌های گیمیفیکیشن
function loadGamificationData() {
    if (fs.existsSync(GAMIFICATION_FILE)) {
        try {
            const data = fs.readFileSync(GAMIFICATION_FILE, 'utf8');
            return JSON.parse(data);
        } catch (error) {
            console.error('خطا در خواندن فایل گیمیفیکیشن:', error);
        }
    }
    return {};
}

// ذخیره داده‌های گیمیفیکیشن
function saveGamificationData(data) {
    try {
        fs.writeFileSync(GAMIFICATION_FILE, JSON.stringify(data, null, 4), 'utf8');
    } catch (error) {
        console.error('خطا در ذخیره فایل گیمیفیکیشن:', error);
    }
}

// دریافت داده‌های کاربر
function getUserGamificationData(userId) {
    const data = loadGamificationData();
    if (!data[userId]) {
        data[userId] = {
            points: 0,
            level: 1,
            streak: 0,
            longestStreak: 0,
            achievements: [],
            lastActivity: null,
            totalTasks: 0,
            completedTasks: 0,
            perfectDays: 0
        };
        saveGamificationData(data);
    }
    return data[userId];
}

// آپدیت داده‌های کاربر
function updateUserGamificationData(userId, updates) {
    const data = loadGamificationData();
    if (!data[userId]) {
        data[userId] = getUserGamificationData(userId);
    }

    Object.assign(data[userId], updates);
    data[userId].lastActivity = new Date().toISOString();

    // آپدیت سطح بر اساس امتیاز
    data[userId].level = Math.floor(data[userId].points / 100) + 1;

    saveGamificationData(data);
    return data[userId];
}

// افزودن امتیاز
function addPoints(userId, points, reason) {
    const userData = getUserGamificationData(userId);
    const oldLevel = userData.level;

    userData.points += points;
    userData.totalTasks += 1;

    // آپدیت سطح
    const newLevel = Math.floor(userData.points / 100) + 1;

    if (newLevel > oldLevel) {
        return {
            ...userData,
            leveledUp: true,
            levelUpMessage: generateLevelUpMessage(newLevel)
        };
    }

    return userData;
}

// امتیازدهی برای تکمیل کار
function awardTaskCompletion(userId) {
    const points = 10; // امتیاز پایه
    const userData = getUserGamificationData(userId);

    userData.completedTasks += 1;
    userData.streak += 1;

    // بونوس برای استریک
    let bonusPoints = 0;
    if (userData.streak >= 7) bonusPoints = 20; // بونوس هفته کامل
    else if (userData.streak >= 3) bonusPoints = 5; // بونوس سه روز پشت سر هم

    const totalPoints = points + bonusPoints;

    updateUserGamificationData(userId, {
        points: userData.points + totalPoints,
        streak: userData.streak,
        longestStreak: Math.max(userData.longestStreak, userData.streak)
    });

    return {
        points: totalPoints,
        streak: userData.streak,
        bonus: bonusPoints > 0
    };
}

// ریست استریک (وقتی کار انجام نشه)
function resetStreak(userId) {
    const userData = getUserGamificationData(userId);
    userData.streak = 0;
    updateUserGamificationData(userId, { streak: 0 });
}

// امتیازدهی برای روز کامل
function awardPerfectDay(userId) {
    const userData = getUserGamificationData(userId);
    userData.perfectDays += 1;

    const points = 50; // امتیاز ویژه برای روز کامل
    updateUserGamificationData(userId, {
        points: userData.points + points,
        perfectDays: userData.perfectDays
    });

    return points;
}

// تولید پیام ارتقای سطح
function generateLevelUpMessage(level) {
    const levelMessages = [
        "🎉 تبریک! سطح 1 شدی! تازه شروع کردی 💪",
        "🌟 عالی! سطح 2 شدی! داره جالب می‌شه! ✨",
        "🔥 فوق‌العاده! سطح 3 شدی! تو بهترینی! 💯",
        "🚀 افسانه‌ای! سطح 4 شدی! هیچ‌کسی مثل تو نیست! 🏆",
        "👑 افسانه! سطح 5 شدی! تو پادشاه وظایف هستی! 👑",
        "💎 الماس! سطح 6 شدی! تو الماسی! 💎",
        "🌈 افسانه‌ای! سطح 7 شدی! رنگین‌کمانی از موفقیت! 🌈",
        "⭐ ستاره! سطح 8 شدی! تو ستاره‌ای در آسمان! ⭐",
        "🦄 افسانه! سطح 9 شدی! تو یونیکورن وظایف هستی! 🦄",
        "👼 فرشته! سطح 10 شدی! تو فرشته نگهبان وظایف هستی! 👼"
    ];

    return levelMessages[Math.min(level - 1, levelMessages.length - 1)];
}

// تولید پیام انگیزشی هوشمند
function generateMotivationalMessage(userId) {
    const userData = getUserGamificationData(userId);
    const patterns = detectBehavioralPatterns(userId);

    let messages = [];

    // پیام بر اساس سطح
    if (userData.level >= 5) {
        messages.push("🏆 تو قهرمانی! سطح بالایی داری، ادامه بده!");
    }

    // پیام بر اساس استریک
    if (userData.streak >= 7) {
        messages.push("🔥 استریک هفت روزه! تو آتش گرفتی عشقم!");
    } else if (userData.streak >= 3) {
        messages.push("⚡ سه روز پشت سر هم! خیلی خوبی!");
    }

    // پیام بر اساس عملکرد کلی
    const completionRate = userData.totalTasks > 0 ? (userData.completedTasks / userData.totalTasks) * 100 : 0;
    if (completionRate >= 80) {
        messages.push("🎯 نرخ تکمیل عالی داری! تو بهترینی!");
    }

    // پیام‌های رندوم انگیزشی محبت‌آمیز (خیلی زیاد!)
    const randomMotivations = [
        // پیام‌های محبت‌آمیز و عاشقانه
        "💕 مائده عزیزم! تو قوی‌ترین و زیباترین دختر دنیایی! هر روز بیشتر بهت افتخار می‌کنم 💖",
        "🥰 عشقم گلم! تو می‌تونی هر کاری که بخوای انجام بدی! من بهت ایمان دارم 💪",
        "💝 جوونم! تو ارزشمندترین شخص زندگی من هستی! هر کارت رو با عشق انجام می‌دی ✨",
        "🌹 مائده جان! تو مثل یک ستاره درخشان هستی که همه جا نور می‌پاشه! خیلی عزیزی 💫",
        "💖 عشقولیم! هر روز که می‌گذره، بیشتر بهت افتخار می‌کنم! تو واقعاً خاصی 🌟",
        "😘 گلم! تو می‌تونی از هر مانعی عبور کنی! قدرت درونی تو خیلی زیاده! 💕",
        "💕 پرنسس من! تو شایسته بهترین چیزهای دنیایی! به خودت ایمان داشته باش ✨",
        "🌺 عزیزم! تو مثل یک گل زیبا هستی که هر روز بیشتر باز می‌شه و قشنگ‌تر می‌شه! 💖",
        "💫 مائده جان! تو بهترین دوست و همراه هستی! خیلی خوشحالم که توی زندگیم هستی 😍",
        "💖 عشقم! تو مثل یک الماس درخشان هستی! هر روز بیشتر می‌درخشی و قشنگ می‌شی ✨",
        
        // پیام‌های انگیزشی و قدرتمند
        "💪 هر قدم کوچیک به هدف بزرگ نزدیک‌تر می‌کنه! تو می‌تونی! 🌟",
        "⚡ انرژی مثبت تو همه چیز رو بهتر می‌کنه! ادامه بده عشقم! 💕",
        "🎯 تمرکز کن عزیزم! تو قوی‌تر از اونی هستی که فکر می‌کنی! 💪",
        "🔥 هر روز فرصتی جدید برای بهتر شدن! تو آماده‌ای که بهترین خودت باشی! ✨",
        "🌟 درخشش تو مثل خورشید هست! همه جا نور می‌پاشه و گرم می‌کنه! 💖",
        "🎨 زندگیت رو با رنگ کارهای انجام شده رنگ کن! زیبا و پر از موفقیت! 🌈",
        "🚀 تو می‌تونی به هر هدفی که بخوای برسی! فقط کافیه شروع کنی! 💪",
        "💎 تو مثل یک گنج گرانبها هستی! ارزش خودت رو بدونی عشقم! ✨",
        "🌻 مثل یک گل که به سمت خورشید می‌چرخه، تو هم همیشه به سمت موفقیت حرکت می‌کنی! 💕",
        "⭐ تو ستاره‌ای در آسمان هستی! هر شب روشن‌تر می‌درخشی! 💫",
        
        // پیام‌های محبت‌آمیز بیشتر
        "💖 مائده جان! من هر روز بیشتر عاشق انگیزه و اراده قوی تو می‌شم! 😍",
        "🥰 عشقم! تو خیلی بانمک و دوست‌داشتنی هستی! هر کارت رو با عشق انجام می‌دی! 💕",
        "💝 گلم! تو بهترین الهام‌بخش من هستی! به خاطر تو هست که من می‌تونم ادامه بدم! ✨",
        "🌹 پرنسس من! تو شایسته تمام خوشبختی‌های دنیایی! ادامه بده عشقم! 💖",
        "💕 جوونم! تو خیلی قوی‌تر از اونی هستی که فکر می‌کنی! من بهت اعتقاد دارم! 💪",
        "😘 عزیزم! تو مثل یک فرشته هستی که همیشه کنارم هستی! خیلی ممنونم! 💫",
        "💖 مائده عزیزم! هر روز که می‌گذره، بیشتر بهت افتخار می‌کنم! تو فوق‌العاده‌ای! 🌟",
        "🌺 گلم! تو خیلی خاص و ارزشمند هستی! هیچ‌کس مثل تو نیست! 💕",
        "💫 عشقولیم! تو بهترین دوست و همراه هستی! خوشحالم که توی زندگیم هستی! ✨",
        "💝 پرنسس زیبای من! تو شایسته بهترین چیزهای دنیایی! ادامه بده! 🌹",
        
        // پیام‌های انگیزشی بیشتر
        "🎪 زندگی یک نمایش هست، تو ستاره اصلی هستی! بدرخش عشقم! ⭐",
        "🌈 هر روز فرصتی برای بهتر شدن! تو آماده‌ای که بهترین خودت باشی! 💪",
        "🔥 استقامت و اراده تو خیلی قویه! ادامه بده جوونم! ✨",
        "💎 تو یک الماس هستی که هر روز صیقل داده می‌شی و می‌درخشی! 💖",
        "🌟 رویاهای تو بزرگه! و تو قوی‌تر از اونی هستی که بهشون برسی! 🚀",
        "💪 هر چالش یک فرصت برای رشد! تو می‌تونی از هر مشکلی عبور کنی! ⚡",
        "🌻 مثل یک گل که در باد مقاومت می‌کنه، تو هم قوی و مقاوم هستی! 💕",
        "⭐ تو روشن‌ترین ستاره آسمون هستی! ادامه بده تا همه ببینن چقدر زیبایی! ✨",
        "🎯 تمرکز و اراده تو خیلی قویه! هیچ مانعی نمی‌تونه جلوت رو بگیره! 💪",
        "💫 انرژی مثبت تو همه جا پخش می‌شه! ادامه بده عشقم! 🌟",
        
        // پیام‌های محبت‌آمیز و عاشقانه بیشتر
        "💖 مائده جان! تو خیلی عزیزی! هر کارت رو با دقت و عشق انجام می‌دی! 😍",
        "🥰 عشقم گلم! تو بهترین هدیه زندگی من هستی! خوشحالم که توی زندگیم هستی! 💕",
        "💝 جوونم! تو خیلی قوی و زیبا هستی! من بهت افتخار می‌کنم! ✨",
        "🌹 پرنسس من! تو شایسته تمام موفقیت‌های دنیایی! ادامه بده عزیزم! 💖",
        "💕 عزیزم! تو خیلی خاص و دوست‌داشتنی هستی! هیچ‌کس مثل تو نیست! 🌟",
        "😘 گلم! تو خیلی بانمک و مهربونی! همه عاشق تو هستن! 💫",
        "💖 مائده عزیزم! هر روز بیشتر بهت افتخار می‌کنم! تو واقعاً فوق‌العاده‌ای! ✨",
        "🌺 عشقولیم! تو خیلی قوی‌تر از اونی هستی که فکر می‌کنی! ادامه بده! 💪",
        "💫 پرنسس زیبای من! تو شایسته بهترین چیزهای دنیایی! من بهت اعتقاد دارم! 💕",
        "💝 جوونم! تو یک فرشته هستی که همیشه کنارم هستی! خیلی ممنونم! 🌹"
    ];

    // اگر پیام‌های شخصی داریم، به لیست اضافه می‌کنیم
    if (messages.length === 0) {
        // اگر هیچ پیام شخصی نداریم، فقط از لیست رندوم انتخاب می‌کنیم
        return randomMotivations[Math.floor(Math.random() * randomMotivations.length)];
    }

    // اضافه کردن یک پیام رندوم محبت‌آمیز
    messages.push(randomMotivations[Math.floor(Math.random() * randomMotivations.length)]);

    // انتخاب یک پیام از لیست (ترجیح با پیام‌های شخصی)
    const selectedIndex = messages.length === 1 ? 0 : Math.floor(Math.random() * messages.length);
    return messages[selectedIndex];
}

// دریافت آمار کاربر
function getUserStats(userId) {
    const userData = getUserGamificationData(userId);
    const patterns = detectBehavioralPatterns(userId);

    return {
        points: userData.points,
        level: userData.level,
        streak: userData.streak,
        longestStreak: userData.longestStreak,
        achievements: userData.achievements,
        perfectDays: userData.perfectDays,
        completionRate: userData.totalTasks > 0 ? Math.round((userData.completedTasks / userData.totalTasks) * 100) : 0,
        behavioralInsights: patterns
    };
}

module.exports = {
    getUserGamificationData,
    updateUserGamificationData,
    addPoints,
    awardTaskCompletion,
    resetStreak,
    awardPerfectDay,
    generateMotivationalMessage,
    getUserStats
};
