/*
chekcSofue.js

Checked per cron jeden Tag die SOFUE - Datenbank. Prüft, ob 'gestern' eine
Führung hätte stattfinden sollen. Wenn ja, wird der BEO der Führung per mail
benachrichtigt mit der Bitte, die Nachbearbeitungs-Webseite auszufüllen.


Versions:
V 0.0   2019-02-04  rxf
    - Start
*/
"use strict"

const DEVELOP=1;                                            // 1 -> Entwicklung  0-> Produktion
const DAYS=9;

const nodemailer = require('nodemailer');
const moment = require('moment');
const mysql = require('mysql2/promise');

const beo_Url = 'beoanswer/beoanswer.php?fdate=';
const Url =         DEVELOP ? 'http://localhost:8081/' : 'https://sternwarte-welzheim.de/';
const DB_host = process.env.DB_HOST || 'localhost';
const DB_port = process.env.DB_PORT || 3306;
const DB_user = process.env.DB_USER || 'root';
const DB_pass = process.env.DB_PASS || 'xxxxxxx';
const DB_dbase = process.env.DB_NAME || 'sternwarte';

const transporter = DEVELOP ? nodemailer.createTransport({
    host: 'localhost',
    port: 1025,
    secure: false, // true for 465, false for other ports
}) : nodemailer.createTransport({
	sendmail: true
//    host: 'smtp.1und1.de',
//   port: 587,
//    secure: false, // true for 465, false for other ports
//    auth: {
//        user: 'rxf@fuerst-stuttgart.de', // generated ethereal user
//        pass: 'tibTop-xopqar-1qyrqe'  // generated ethereal password
//    }
});


// Ajax-Call, um die Daten von der DBase zu holen
async function fetchDatafromDB(conn,termin) {
    let result;
    let id;
    let query = "select mitarbeiter,id from SoFue2 where DATE(wtermin) = '" + termin + "' and status = 2";
    try {
        result = await conn.query(query);
        if (result[0].length == 0) {
            console.log("Keine Führung gewesen");
            return;
        }
        let ma = result[0][0].mitarbeiter;
        id = result[0][0].id;
        query = "select vorname,email_1 from beos  where name = '" + ma + "'";
        result = await conn.query(query);
    }
    catch(err) {
        console.log(err);
    }
    finally  {
        conn.end();
    }
    let erg = result[0];
    send2BEO({name: erg[0].vorname, email: erg[0].email_1, date: termin, id: id});
}


function send2BEO(info) {
    var mailOptions = {
        from: 'noreply@sternwarte-welzheim.de',
//        to: info.email,
        to: 'rexfue@gmail.com',
        subject: 'Sonderführung vom '+info.date,
        text: 'Hallo ' + info.name +',\n\n'
            + 'Du hattest gestern Führung! '
            + 'Bitte fülle folgendes Webformular aus:\n\n'
            + Url + beo_Url + info.date + '&id=' + info.id
            + '\n\nBitte nur über diesen Link zugreifen (oder exakt abschreiben),\n'
            + 'da sonst die Zuordnung nicht hergestellt werden kann.\n'
            + 'Besten Dank.\n\nGrüße vom Sonderführungsteam'
    };

    transporter.sendMail(mailOptions, function (error, info) {
        if (error) {
            console.log(error);
        } else {
            console.log('Email gesendet an ' + mailOptions.to);
//            console.log(info);
        }
    });
}

async function main() {
    console.log(DB_host, DB_port, DB_user, DB_pass, DB_dbase);
    const yesterday = moment().subtract(DAYS, 'd').format('YYYY-MM-DD');
    console.log('Yesterday:', yesterday)
    const connection = await mysql.createConnection({
        host: DB_host,
        port: DB_port,
        user: DB_user,
        password: DB_pass,
        database: DB_dbase,
    });
    await fetchDatafromDB(connection, yesterday);
    console.log("All done");
}

main().catch(console.error);
