import { Router } from "express";
import { confirmTelegramFromBot } from "../services/auth.service.js";

const router = Router();

const BOT_TOKEN = process.env.TELEGRAM_BOT_TOKEN;
const WEBHOOK_SECRET = process.env.TELEGRAM_WEBHOOK_SECRET;

async function tgSendMessage(chatId, text) {
  if (!BOT_TOKEN) return;
  try {
    await fetch(`https://api.telegram.org/bot${BOT_TOKEN}/sendMessage`, {
      method: "POST",
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify({ chat_id: chatId, text, parse_mode: "HTML" }),
    });
  } catch (err) {
    console.error("[tg] sendMessage failed", err.message);
  }
}

router.post("/webhook", async (req, res) => {
  // Telegram добавит заголовок если мы установили secret_token при setWebhook
  if (WEBHOOK_SECRET) {
    const got = req.get("x-telegram-bot-api-secret-token");
    if (got !== WEBHOOK_SECRET) {
      console.warn("[tg] webhook: bad secret token");
      return res.status(401).json({ ok: false });
    }
  }

  // Всегда отвечаем 200 — иначе Telegram будет ретраить
  res.json({ ok: true });

  try {
    const update = req.body || {};
    const msg = update.message;
    if (!msg || !msg.text || !msg.from || !msg.chat) return;

    const text = String(msg.text).trim();
    const m = text.match(/^\/start\s+(\S+)/);
    if (!m) {
      // /start без параметра или другая команда — приветствие
      if (text === "/start" || text === "/help") {
        await tgSendMessage(msg.chat.id,
          "Привет! Это бот авторизации <b>One Click</b>.\n\nЧтобы войти на сайт, нажмите кнопку «Войти через Telegram» на сайте — она пришлёт вам сюда специальную ссылку.");
      }
      return;
    }

    const token = m[1];
    const result = await confirmTelegramFromBot({ token, telegramUser: msg.from });

    await tgSendMessage(msg.chat.id, result.message || (result.ok ? "Готово!" : "Не получилось войти."));
  } catch (err) {
    console.error("[tg] webhook handler error:", err);
  }
});

export default router;
