const express = require('express');
const router = express.Router();

const IscrittiConacreis = require('../models/iscrittiConacreis');
const { ObjectId } = require('mongodb');

const sendemail = require('../sendemail');

const { Settings } = require('../models/settings');

const tools = require('../tools/general');
const shared_consts = require('../tools/shared_nodejs');

const server_constants = require('../tools/server_constants');

const telegrambot = require('../telegram/telegrambot');

const _ = require('lodash');

const { authenticate } = require('../middleware/authenticate');

const mongoose = require('mongoose').set('debug', false)


// POST /iscritti_conacreis
router.post('/', async (req, res) => {
  tools.mylog("POST /iscritti_conacreis");
  const body = req.body;
  body.email = body.email.toLowerCase();

  const iscritti = new IscrittiConacreis(body);
  iscritti.ipaddr = tools.getiPAddressUser(req);
  iscritti.lang = req.locale;

  // tools.mylog("LANG PASSATO = " + iscritti.lang, "IDAPP", iscritti.idapp);

  if (!tools.isAlphaNumeric(body.name)) {
    await tools.snooze(5000);
    res.status(400).send({ code: server_constants.RIS_CODE_USERNAME_NOT_VALID, msg: '' });
    return 1;
  }

  if (tools.blockwords(body.username) || tools.blockwords(body.email) || tools.blockwords(body.name) || tools.blockwords(body.surname)) {
    // tools.writeIPToBan(iscritti.ipaddr + ': [' + iscritti.username + '] ' + iscritti.name + ' ' + iscritti.surname);
    await tools.snooze(5000);
    return res.status(404).send();
  }

  iscritti.dateofreg = new Date();

  // Controlla se anche l'ultimo record era dallo stesso IP:
  const lastrec = await IscrittiConacreis.getLastRec(body.idapp);
  if (!!lastrec) {
    if (process.env.LOCALE !== "1") {
      if (lastrec.ipaddr === iscritti.ipaddr) {
        // Se l'ha fatto troppo ravvicinato
        if (lastrec.date_reg) {
          let ris = tools.isdiffSecDateLess(lastrec.date_reg, 120);
          if (ris) {
            tools.writeIPToBan(iscritti.ipaddr + ': ' + tools.getNomeCognomeEUserNameByUser(iscritti));
            await tools.snooze(10000);
            res.status(400).send({ code: server_constants.RIS_CODE_BANIP, msg: '' });
            return 1;
          }
        }
      }
    }
  }

  return iscritti.save()
    .then(async () => {
      await sendemail.sendEmail_IscrizioneConacreis(iscritti.lang, iscritti.email, iscritti, iscritti.idapp);
      // }
      return res.status(200).send();
    }).catch((e) => {
      console.error(e.message);
      res.status(400).send(e);
    })
});


module.exports = router;
