const express = require('express');
const cors = require("cors");
const bodyParser = require('body-parser');

const auth = require("./routes/auth/auth");
const checkSession = require("./routes/auth/checkSession");

const authIgnorePaths = ['auth']

const app = express();

// Middleware для проверки авторизации
const checkAuth = async (req, res, next) => {
  if (authIgnorePaths.includes(req.path)) {
    // Если маршрут в списке, то не проверяем сессию
    return next();
  }

  const authToken = req.headers.authorization;
  if (!authToken) {
    return res.status(401).json({error: 'Unauthorized'});
  }

  const session = await checkSession(authToken)
  if(session){
    return next();
  }

  return res.status(401).json({error: 'Unauthorized'});
};

app.use(cors()); // разрешаем все источники
app.use(bodyParser.json());
app.use(checkAuth); //todo Применяем middleware функцию для всех маршрутов


// Авторизация
app.post(['/auth'], async (req, res) => {
  try{
    const result = await auth(req.body)

    if(result === 'Unauthorized'){
      res.status(401);
    }

    res.status(200).json(result);
  }catch (e) {
    console.log('Ошибка')
    res.status(500).json({error: e})
  }
});

// Проверка сессии
app.get(['/checkSession'], async (req, res) => {
  try{
    const authToken = req.headers.authorization ?? null

    const result = await checkSession(authToken)

    res.status(200).json(result);
  }catch (e) {
    console.log('Ошибка')
    res.status(500).json({error: e})
  }
});


//todo remove
// Функция для проверки событий
// async function runEvents() {
  // await Promise.all([
    // suspiciousSearch(),
    // checkMaxConsumersCount()
  // ])
// }

//интервал проверки событий
// setInterval(runEvents, 180*1000); //180 секунд

// Запуск сервера
app.listen(3000, () => {
  console.log('Сервер запущен на порту 3000');
});
