/**
 * سیستم پیشنهاد هوشمند کارها
 */
const { getUserTasks } = require('./database');
const { detectBehavioralPatterns } = require('./analytics');

// پیشنهادهای آماده
const SUGGESTION_TEMPLATES = {
    morning: [
        { task: 'صبحانه سالم بخور', time: '07:00' },
        { task: 'ورزش صبحگاهی', time: '06:30' },
        { task: 'لیوان آب گرم بنوش', time: '06:00' },
        { task: 'مدتی مدیتیشن کن', time: '06:15' },
        { task: 'برنامه روز رو مرور کن', time: '08:00' }
    ],
    evening: [
        { task: 'شام سبک بخور', time: '19:00' },
        { task: 'کتاب بخوان', time: '20:00' },
        { task: 'با خانواده وقت بگذران', time: '19:30' },
        { task: 'پیاده‌روی عصرگاهی', time: '18:00' },
        { task: 'آماده خواب شو', time: '22:00' }
    ],
    study: [
        { task: 'درس بخوان', time: '14:00' },
        { task: 'تمرین حل کن', time: '16:00' },
        { task: 'یادگیری زبان', time: '15:00' },
        { task: 'خلاصه‌نویسی کن', time: '17:00' }
    ],
    health: [
        { task: '۸ لیوان آب بنوش', time: '18:00' },
        { task: 'میوه تازه بخور', time: '10:00' },
        { task: 'استراحت کوتاه کن', time: '15:00' },
        { task: 'حرکات کششی انجام بده', time: '12:00' }
    ],
    productivity: [
        { task: 'ایمیل‌ها رو چک کن', time: '09:00' },
        { task: 'میز کار رو مرتب کن', time: '08:30' },
        { task: 'اهداف امروز رو بنویس', time: '08:15' },
        { task: 'گزارش روزانه بنویس', time: '17:30' }
    ]
};

// پیشنهاد بر اساس زمان روز
function getTimeBasedSuggestions(hour) {
    if (hour >= 6 && hour <= 10) return SUGGESTION_TEMPLATES.morning;
    if (hour >= 18 && hour <= 22) return SUGGESTION_TEMPLATES.evening;
    if (hour >= 14 && hour <= 17) return SUGGESTION_TEMPLATES.study;
    if (hour >= 8 && hour <= 12) return SUGGESTION_TEMPLATES.productivity;
    return SUGGESTION_TEMPLATES.health;
}

// پیشنهاد بر اساس الگوهای رفتاری کاربر
function getPersonalizedSuggestions(userId) {
    const tasks = getUserTasks(userId);
    const patterns = detectBehavioralPatterns(userId);
    const suggestions = [];

    // بر اساس کارها معمول
    if (patterns.commonTasks.length > 0) {
        patterns.commonTasks.forEach(({ task, count }) => {
            if (count >= 3) {
                // پیشنهاد تکرار کارهای موفق
                const similarTasks = [
                    `${task} (مرور)`,
                    `پیشرفت ${task} رو چک کن`,
                    `${task} پیشرفته`
                ];
                suggestions.push({
                    task: similarTasks[Math.floor(Math.random() * similarTasks.length)],
                    reason: 'کار معمول تو'
                });
            }
        });
    }

    // بر اساس زمان‌های ترجیحی
    if (patterns.morningPerson) {
        suggestions.push({
            task: 'برنامه صبحت رو شروع کن',
            time: '06:00',
            reason: 'صبح‌دوست هستی!'
        });
    }

    if (patterns.nightOwl) {
        suggestions.push({
            task: 'کارهای خلاقانه انجام بده',
            time: '22:00',
            reason: 'شب‌دوست هستی!'
        });
    }

    // بر اساس مشکلات
    if (patterns.procrastinator) {
        suggestions.push({
            task: 'یک کار کوچک انجام بده',
            reason: 'برای شکستن چرخه تعویق!'
        });
    }

    if (!patterns.consistent) {
        suggestions.push({
            task: 'امروز رو با یک پیروزی شروع کن',
            reason: 'برای ایجاد consistency'
        });
    }

    return suggestions;
}

// پیشنهادهای هوشمند بر اساس شرایط فعلی
function getSmartSuggestions(userId, currentHour = null) {
    const hour = currentHour || new Date().getHours();
    const timeBased = getTimeBasedSuggestions(hour);
    const personalized = getPersonalizedSuggestions(userId);

    // ترکیب و اولویت‌بندی
    const allSuggestions = [...personalized];

    // اضافه کردن پیشنهادهای زمانی (تا 2 تا)
    const timeSuggestions = timeBased.slice(0, 2);
    allSuggestions.push(...timeSuggestions.map(s => ({
        ...s,
        reason: 'پیشنهاد هوشمند'
    })));

    // اضافه کردن پیشنهادهای انگیزشی
    const motivationalSuggestions = [
        { task: 'به خودت تبریک بگو', reason: 'برای انگیزش!' },
        { task: 'یک کار خیریه کوچک انجام بده', reason: 'برای روحیه' },
        { task: 'با یک دوست صحبت کن', reason: 'برای انرژی مثبت' },
        { task: 'موسیقی مورد علاقه‌ت گوش کن', reason: 'برای آرامش' }
    ];

    // اضافه کردن یک پیشنهاد انگیزشی رندوم
    const randomMotivational = motivationalSuggestions[Math.floor(Math.random() * motivationalSuggestions.length)];
    allSuggestions.push(randomMotivational);

    // محدود کردن به 5 پیشنهاد
    return allSuggestions.slice(0, 5);
}

// تولید پیام پیشنهاد
function generateSuggestionMessage(suggestions) {
    if (suggestions.length === 0) {
        return '😊 الان وقت خوبی برای استراحت هست!';
    }

    let message = '💡 پیشنهادهای هوشمند برای تو:\n\n';

    suggestions.forEach((suggestion, index) => {
        const emoji = ['🎯', '✨', '🌟', '💪', '🚀'][index] || '💡';
        message += `${emoji} ${suggestion.task}`;

        if (suggestion.time) {
            message += ` (ساعت ${suggestion.time})`;
        }

        if (suggestion.reason) {
            message += ` - ${suggestion.reason}`;
        }

        message += '\n';
    });

    message += '\nمی‌خوای یکی از این‌ها رو اضافه کنم؟ فقط بگو! 💕';

    return message;
}

// پیشنهاد بر اساس عملکرد اخیر
function getPerformanceBasedSuggestions(userId) {
    const patterns = detectBehavioralPatterns(userId);

    const suggestions = [];

    if (patterns.consistent) {
        suggestions.push({
            task: 'یک چالش جدید امتحان کن',
            reason: 'وقتی consistent هستی، زمان یادگیریه!'
        });
    }

    if (patterns.overAchiever) {
        suggestions.push({
            task: 'به خودت استراحت بده',
            reason: 'شایسته استراحت هستی!'
        });
    }

    return suggestions;
}

module.exports = {
    getSmartSuggestions,
    getTimeBasedSuggestions,
    getPersonalizedSuggestions,
    generateSuggestionMessage,
    getPerformanceBasedSuggestions
};
