const botModel = require('../models/botModel');
const ServiceModel = require('../models/ServiceModel');
const AiModule = require('../modules/AiModule');
const ServiceModule = require('../modules/ServiceModule');
const MediaModule = require('../modules/MediaModule');

// -------------------------------------------------------
// تنظیمات آی‌دی گروه‌های خاص (Environment Config)
// -------------------------------------------------------
const SPECIAL_CHATS = {
    VIRA_FORWARDER: -1065851684111111111168,
    CINEMA_FORWARDER: -10012345111111116789,
    MUSIC_FORWARDER: -100987651111111114321,
    TEST_GROUP: -1001155301071 
};

class Telegram {
    async handleWebhook(update, webhookCode) {
        const message = update.message;
        const callback = update.callback_query;

        if (!message && !callback) return;

        // -------------------------------------------------------
        // احراز هویت ربات (Multi-Bot Support)
        // -------------------------------------------------------
        const token = await botModel.getBotTokenByCode(webhookCode);
        if (!token) return;

        // -------------------------------------------------------
        // تعریف متغیرهای تخت (Flat Variables) - استایل انسانی
        // -------------------------------------------------------
        const text = (message?.text || '').trim();
        const caption = (message?.caption || '').trim();
        const chatId = message?.chat.id || callback?.message?.chat.id;
        const messageId = message?.message_id || callback?.message?.message_id;
        const userId = message?.from?.id || callback?.from?.id;
        
        const videoId = message?.video?.file_id || message?.document?.file_id;
        const photo = message?.photo;
        const audioId = message?.audio?.file_id;

        const isReply = !!message?.reply_to_message;
        const isReplyToBot = message?.reply_to_message?.from?.is_bot;
        const replText = message?.reply_to_message?.text;
        const replVideoId = message?.reply_to_message?.video?.file_id;

        const botTrigger = "ویرا";

        // -------------------------------------------------------
        // مسیردهی بر اساس محیط (Environment Routing)
        // -------------------------------------------------------

        // ۱. محیط مدیریت کانال ویرا
        if (chatId === SPECIAL_CHATS.VIRA_FORWARDER) {
            return await handleViraManager();
        }

        // ۲. محیط مدیریت کانال‌های محتوایی (سینما و موزیک)
        if (chatId === SPECIAL_CHATS.CINEMA_FORWARDER || chatId === SPECIAL_CHATS.MUSIC_FORWARDER) {
            return await handleContentManagers();
        }

        // ۳. محیط عمومی و گروه‌های مهمان
        return await handlePublicEnvironment();


        // -------------------------------------------------------
        // هندلر: مدیریت اختصاصی ویرا (Vira Manager)
        // -------------------------------------------------------
        async function handleViraManager() {
            console.log("--- ورود به محیط مدیریت ویرا ---");
            // فعلاً فقط لاگ یا ریترن ساده
            await console.log("Handling Vira Forwarder Logic...");
        }


        // -------------------------------------------------------
        // هندلر: مدیریت محتوا (Content Managers)
        // -------------------------------------------------------
        async function handleContentManagers() {
            console.log("--- ورود به محیط مدیریت محتوا (سینما/موزیک) ---");
            await console.log(`Handling Content for Chat: ${chatId}`);
        }


        // -------------------------------------------------------
        // هندلر: محیط عمومی (Public Environment)
        // -------------------------------------------------------
        async function handlePublicEnvironment() {
            //console.log("--- ورود به محیط عمومی ---");

            // الف) پاسخ به ریپلای بوت
            if (isReply && isReplyToBot) {
                await console.log("AI Chat Logic via Reply...");
            }
            

            // ب) دستورات با پیشوند "ویرا"
            if (text.startsWith(botTrigger)) {
                const commandBody = text.replace(botTrigger, '').trim();
        
                // --- بخش ارز (ساده و سریع در همین‌جا) ---
                if (commandBody === 'ارز') {
                    const importantKeys = [
                        'price_dollar_rl', 'price_eur', 'price_rub', 'price_aed', 'price_gbp', 
                        'price_try', 'price_cny', 'price_cad', 'price_iqd', 'price_sar', 'price_omr', 'price_kwd'
                    ];
                    const prices = await ServiceModel.getPricesByKeys(importantKeys); 
        
                    if (!prices || prices.length === 0) {
                        return await botModel.sendMessage(token, chatId, "❌ دیتای بازار در حال حاضر در دسترس نیست.", messageId);
                    }
        
                    const flags = { 
                        'price_dollar_rl': '🇺🇸', 'price_eur': '🇪🇺', 'price_rub': '🇷🇺', 'price_aed': '🇦🇪', 
                        'price_gbp': '🇬🇧', 'price_try': '🇹🇷', 'price_cny': '🇨🇳', 'price_cad': '🇨🇦', 
                        'price_iqd': '🇮🇶', 'price_sar': '🇸🇦', 'price_omr': '🇴🇲', 'price_kwd': '🇰🇼' 
                    };
                    let report = "💰 **نرخ ارزهای شاخص به تومان**\n\n";
                    
                    prices.forEach(item => {
                        const flag = flags[item.market_key] || '🔹';
                        
                        // ۱. حذف اعشار (تبدیل به عدد صحیح و حذف .000)
                        const cleanPrice = Math.floor(parseFloat(item.price)).toLocaleString(); 
                    
                        // ۲. تراز کردن: ایجاد فاصله بین نام و قیمت
                        // نام و پرچم را سمت راست و قیمت را داخل کد (تیک) برای تراز شدن می‌گذاریم
                        let line = `${flag} ${item.market_name}:`;
                        
                        // ایجاد فاصله‌های خالی برای هل دادن قیمت به سمت چپ (تراز دستی)
                        const padding = " ".repeat(Math.max(1, 30 - item.market_name.length));
                        
                        report += `${line}${padding}\`${cleanPrice}\`\n`;
                    });
        
                    report += "\n➖➖➖➖➖➖➖➖\n🆔 @ViraChannel";
                    return await botModel.sendMessage(token, chatId, report, messageId);
                }
                
        
                // --- بخش‌های سنگین (ارجاع به ماژول) ---
                if (commandBody === 'فال') {
                    return await ServiceModule.getFortune(token, chatId, messageId); 
                }
                
        
                // سایر موارد...
                return await AiModule.handleChat(token, message, commandBody);
            }

            // ج) اکشن‌های خاص روی ریپلای (مثل صدا جدا)
            if (isReply && text === 'صدا جدا' && replVideoId) {
                await console.log("Audio Extraction Logic...");
            }

            // د) تست اکو برای گروه تست
            if (chatId === SPECIAL_CHATS.TEST_GROUP) {
                return await botModel.sendMessage(token, chatId, `ویرا تستر: ${text}`, messageId);
            }
        }
    }
}

module.exports = new Telegram();