import { MiddlewareFn } from "grammy";
import { MyContext } from "../../types/myContext";
import { getOrCreateUserByTelegramId } from "../../api/users";

/**
 * Данный middleware пытается загрузить пользователя из базы данных
 * по его Telegram ID, а если пользователя ещё нет - создаёт.
 * Результат сохраняется в ctx.userDoc, чтобы использовать далее в логике бота.
 */
export const loadUserMiddleware: MiddlewareFn<MyContext> = async (
  ctx,
  next,
) => {
  // Если апдейт не содержит from или это системное сообщение от Telegram
  if (!ctx.from) {
    return next();
  }

  const telegramId = ctx.from.id;

  try {
    // Пытаемся получить или создать пользователя по Telegram ID
    const userDoc = await getOrCreateUserByTelegramId(telegramId);
    ctx.userDoc = userDoc; // сохраняем пользователя в контекст
  } catch (error) {
    console.error("Ошибка при загрузке пользователя:", error);
    // Можно отправить пользователю сообщение об ошибке или пропустить
    await ctx.reply(
      "Произошла ошибка при загрузке ваших данных. Попробуйте позже.",
    );
    return; // Прекращаем обработку, если критическая ошибка
  }

  // Переходим к следующему middleware или обработчику
  return next();
};
