const fs = require("fs");
const path = require("path");
const TelegramBot = require("node-telegram-bot-api");
const { S3Client, PutObjectCommand } = require("@aws-sdk/client-s3");

const TOKEN = process.env.TELEGRAM_TOKEN;
const CHAT_ID = process.env.CHAT_ID;
const DB_PATH = process.env.DATABASE_PATH || "../";
const FILE = path.join(DB_PATH, "database.sqlite");

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

// Настройки S3 / R2
const s3Client = new S3Client({
  region: "auto",
  endpoint: process.env.S3_ENDPOINT,
  credentials: {
    accessKeyId: process.env.S3_ACCESS_KEY_ID || "",
    secretAccessKey: process.env.S3_SECRET_ACCESS_KEY || ""
  },
});

class Backup {
  async database() {
    try {
      if (!fs.existsSync(FILE)) {
        console.log("❌ Файл бази даних не знайдено:", FILE);
        return;
      }

      const fileName = `backup_${new Date().toISOString().replace(/[:.]/g, "-")}.sqlite`;

      const fileBuffer = fs.readFileSync(FILE);

      // 1. Отправка в Telegram
      await bot.sendDocument(CHAT_ID, fileBuffer, {
        caption: `📦 Резервна копія бази даних`,
      });
      console.log("✅ Telegram: успішно надіслано");

      // 2. Отправка в S3 (R2)      
      const uploadParams = {
        Bucket: process.env.S3_BUCKET_NAME,
        Key: `sheep-service.com/database/${fileName}`,
        Body: fileBuffer,
        ContentType: "application/x-sqlite3",
      };

      await s3Client.send(new PutObjectCommand(uploadParams));
      console.log("✅ S3: успішно завантажено в хмару");
    } catch (err) {
      console.error("❌ Помилка при надсиланні файлу:", err.message);
    }
  }
}

module.exports = new Backup();