/**
 * سیستم تحلیل هوشمند عملکرد کاربر
 */
const { getUserTasks, getTodayTasksStats } = require('./database');

// امتیازدهی عملکرد
function calculatePerformanceScore(stats) {
    const { notAware, awareNotDone, awareAndDone, total } = stats;

    if (total === 0) return 0;

    // وزن‌دهی: حواس بودن = 40%، انجام دادن = 60%
    const awarenessWeight = 0.4;
    const completionWeight = 0.6;

    const awarenessScore = total > 0 ? ((awareNotDone + awareAndDone) / total) * awarenessWeight : 0;
    const completionScore = (awareAndDone + awareNotDone) > 0 ? (awareAndDone / (awareAndDone + awareNotDone)) * completionWeight : 0;

    return Math.round((awarenessScore + completionScore) * 100);
}

// تحلیل روند عملکرد
function analyzePerformanceTrend(userId, days = 7) {
    const trends = [];
    const now = new Date();

    for (let i = days - 1; i >= 0; i--) {
        const date = new Date(now);
        date.setDate(date.getDate() - i);
        const dateStr = date.toISOString().split('T')[0];

        const stats = getTodayTasksStats(userId, dateStr);
        const score = calculatePerformanceScore(stats);

        trends.push({
            date: dateStr,
            score: score,
            stats: stats
        });
    }

    return trends;
}

// تشخیص الگوهای رفتاری
function detectBehavioralPatterns(userId) {
    const tasks = getUserTasks(userId);
    const patterns = {
        morningPerson: false,
        nightOwl: false,
        consistent: true,
        procrastinator: false,
        overAchiever: false,
        favoriteTimes: [],
        commonTasks: []
    };

    if (tasks.length < 5) return patterns; // نیاز به داده کافی

    // تحلیل ساعات کاری
    const hourCounts = {};
    tasks.forEach(task => {
        const hour = parseInt(task.time.split(' ')[1].split(':')[0]);
        hourCounts[hour] = (hourCounts[hour] || 0) + 1;
    });

    // تشخیص morning person یا night owl
    const morningHours = [6, 7, 8, 9, 10, 11];
    const nightHours = [22, 23, 0, 1, 2, 3];

    const morningTasks = morningHours.reduce((sum, hour) => sum + (hourCounts[hour] || 0), 0);
    const nightTasks = nightHours.reduce((sum, hour) => sum + (hourCounts[hour] || 0), 0);

    patterns.morningPerson = morningTasks > nightTasks * 1.5;
    patterns.nightOwl = nightTasks > morningTasks * 1.5;

    // تحلیل تکالیف متداول
    const taskCounts = {};
    tasks.forEach(task => {
        const taskName = task.task.toLowerCase().trim();
        taskCounts[taskName] = (taskCounts[taskName] || 0) + 1;
    });

    patterns.commonTasks = Object.entries(taskCounts)
        .sort(([,a], [,b]) => b - a)
        .slice(0, 3)
        .map(([task, count]) => ({ task, count }));

    // تحلیل consistency (پشت سر هم انجام دادن کارها)
    const recentTasks = tasks.slice(-10);
    let consecutiveDone = 0;
    let maxConsecutive = 0;

    recentTasks.forEach(task => {
        if (task.done) {
            consecutiveDone++;
            maxConsecutive = Math.max(maxConsecutive, consecutiveDone);
        } else {
            consecutiveDone = 0;
        }
    });

    patterns.consistent = maxConsecutive >= 3;
    patterns.overAchiever = recentTasks.filter(t => t.done).length >= 8;

    // تشخیص procrastinator
    const overdueTasks = tasks.filter(task => {
        const taskDate = new Date(task.time);
        const now = new Date();
        return !task.done && taskDate < now && task.reminded;
    });

    patterns.procrastinator = overdueTasks.length > 5;

    return patterns;
}

// تولید توصیه‌های هوشمند
function generateSmartRecommendations(userId) {
    const patterns = detectBehavioralPatterns(userId);
    const trends = analyzePerformanceTrend(userId, 7);
    const recommendations = [];

    // توصیه بر اساس الگوها
    if (patterns.morningPerson) {
        recommendations.push("🌅 تو آدم صبحونه! کارهاتو برای صبح زود تنظیم کن.");
    }

    if (patterns.nightOwl) {
        recommendations.push("🦉 تو جغد شبانه‌ای! کارهاتو برای شب تنظیم کن.");
    }

    if (patterns.consistent) {
        recommendations.push("🎯 عالی! پشت سر هم کاراتو انجام می‌دی. ادامه بده!");
    }

    if (patterns.procrastinator) {
        recommendations.push("⏰ مراقب باش، کارها رو عقب نیاندازی!");
    }

    if (patterns.overAchiever) {
        recommendations.push("🏆 تو فوق‌العاده‌ای! اهداف بزرگ‌تری بذار!");
    }

    // توصیه بر اساس روند
    const recentTrend = trends.slice(-3);
    const avgRecent = recentTrend.reduce((sum, t) => sum + t.score, 0) / recentTrend.length;
    const avgOverall = trends.reduce((sum, t) => sum + t.score, 0) / trends.length;

    if (avgRecent > avgOverall + 10) {
        recommendations.push("📈 عملکردت عالی شده! این روند رو حفظ کن.");
    } else if (avgRecent < avgOverall - 10) {
        recommendations.push("📉 عملکردت کمی کم شده، انگیزه بگیر!");
    }

    // توصیه بر اساس کارها
    if (patterns.commonTasks.length > 0) {
        const topTask = patterns.commonTasks[0];
        recommendations.push(`🔄 معمولاً کار "${topTask.task}" رو انجام می‌دی.`);
    }

    return recommendations;
}

// تحلیل احساسات کاربر (ساده)
function analyzeSentiment(text) {
    const positiveWords = [
        'عالی', 'خوب', 'عالیه', 'خوبه', 'قشنگ', 'زیبا', 'عاشق', 'دوست', 'ممنون',
        'great', 'good', 'nice', 'awesome', 'love', 'thanks', 'wonderful'
    ];

    const negativeWords = [
        'بد', 'وحشتناک', 'عصبانی', 'ناراحت', 'خسته', 'کلافه', 'افسرده',
        'bad', 'terrible', 'angry', 'sad', 'tired', 'frustrated'
    ];

    const textLower = text.toLowerCase();
    let positiveScore = 0;
    let negativeScore = 0;

    positiveWords.forEach(word => {
        if (textLower.includes(word)) positiveScore++;
    });

    negativeWords.forEach(word => {
        if (textLower.includes(word)) negativeScore++;
    });

    if (positiveScore > negativeScore) return 'positive';
    if (negativeScore > positiveScore) return 'negative';
    return 'neutral';
}

module.exports = {
    calculatePerformanceScore,
    analyzePerformanceTrend,
    detectBehavioralPatterns,
    generateSmartRecommendations,
    analyzeSentiment
};
