const db = require("../config/db");
const TelegramBot = require("node-telegram-bot-api");

const util = require('util');
const dbAll = util.promisify(db.all).bind(db);
const dbRun = util.promisify(db.run).bind(db);

const TOKEN = process.env.TELEGRAM_TOKEN;
const STAND_CHAT_ID = process.env.STAND_CHAT_ID;

const bot = new TelegramBot(TOKEN, { polling: false });

class Messages {
    async cleanup_old() {
        try {
            // "Зараз мінус 24 години"
            const oneDayAgo = Date.now() - (24 * 60 * 55 * 1000);

            // 1. Отримуємо повідомлення, які старші за добу
            const oldMessages = await dbAll(
                `SELECT last_message_id FROM sent_messages WHERE created_at < ?`,
                [oneDayAgo]
            );

            if (!oldMessages || oldMessages.length === 0) {
                console.log('🧹 Застарілих повідомлень не знайдено.');
                return;
            }

            console.log(`🧹 Знайдено ${oldMessages.length} повідомлень для видалення...`);

            // 2. Видаляємо повідомлення з Telegram по черзі
            for (const msg of oldMessages) {
                try {
                    await bot.deleteMessage(STAND_CHAT_ID, msg.last_message_id);
                    await new Promise(resolve => setTimeout(resolve, 50)); // пауза 50мс
                } catch (e) {
                    // Код помилки 400 зазвичай означає, що повідомлення вже видалено вручну
                    // або минуло понад 48 годин
                    console.log(`⚠️ Повідомлення ${msg.last_message_id} не знайдено в Telegram або застаре.`);
                }
            }

            // 3. Видаляємо записи з бази даних одним махом
            await dbRun(`DELETE FROM sent_messages WHERE created_at < ?`, [oneDayAgo]);
            
            console.log(`✅ Очистка завершена.`);

        } catch (err) {
            console.error('❌ Помилка під час виконання cleanup_old:', err.message);
        }
    }
}

module.exports = new Messages();