const { Contact } = require('../models/contact.model');
const nodemailer = require('nodemailer');
var validator = require('validator');
const  config  = require('../config/config.json');





//post contact
exports.addContact = async (req, res, next) => {

    try {
         // génère une exception
         if (!req.body.email) { throw new Error('Adresse email introuvable') }
         if (!validator.isEmail(req.body.email)) { throw new Error('Adresse email invalide') }
         

        const contact = new Contact({
            lastname: req.body.lastname,
            email: req.body.email,
            message: req.body.message,
            is_closed: false
        });

        contact.save()
            .then(() => { res.status(201).json({ success: true, message: 'Votre message a été envoyé avec success' }) })
            .catch((error) => { res.status(500).json(error.message) });
    }
    catch (err) { res.status(400).json({ success: false, message: err.message }) }
};



//get how many notification 
exports.notificationContact = async (req, res, next) => {

    Contact.countDocuments({ is_closed: false })
        .then(
            (notif) => {
                res.status(200).json({ success: true, notification: notif });
            }
        ).catch(
            () => { res.status(500).json({ success: false, message: 'Erreur dans le serveur' }) }
        )
}


// get contact not closed
exports.getnotclosedContact = async (req, res, next) => {

    Contact.find({ is_closed: false })
        .then((contact) => { res.status(200).json(contact) })
        .catch(() => { res.status(500).json({ success: false, message: 'Erreur dans le serveur' }) })
}



// get contact closed
exports.getclosedContact = async (req, res, next) => {

    Contact.find({ is_closed: true })
        .then((contact) => { res.status(200).json(contact) })
        .catch(() => { res.status(500).json({ success: false, message: 'Erreur dans le serveur' }) })
}





//response contact 
exports.ResponseContact = async (req, res, next) => {

    if (req.query.id) {
        if (req.body.text) {

            Contact.findOne({ _id: req.query.id })
                .then((item) => {

                    if (item.is_closed === false) {

                        var smtpTransport = nodemailer.createTransport({
                            host: config.email.host,
                            port: config.email.port,
                            secure: true,
                            auth: { user: config.email.user, pass: config.email.pass },
                            tls: { rejectUnauthorized: false }, // do not fail on invalid certs 
                        });

                        var mailOptions = {
                            to: item.email,
                            from: config.email.email,
                            subject: `Réponse  à votre message`,
                            text: req.body.text
                        };

                        item.is_closed = true
                        item.response = req.body.text
                        item.response_date = new Date()

                        item.save().then(() => {

                            smtpTransport.sendMail(mailOptions)
                                .then(() => {
                                    res.status(200).json({ success: true, message: `Votre réponse a été envoyer avec success` })
                                })
                                .catch((e) => res.status(500).json({ success: false, message: `${e}` }))

                        }).catch((e) => res.status(500).json({ success: false, message: `${e}` }))
                    } else {
                        res.status(400).json({ success: false, message: `Le Message a été fermer` })
                    }
                }
                )
                .catch((e) => res.status(404).json({ success: false, message: `Message non trouvé` }))

        } else {
            res.status(400).json({ success: false, message: `Le message est obligatoire` })
        }
    } else {
        res.status(400).json({ success: false, message: `Identifiant du message non trouvé` })
    }
}






//colse contact
exports.CloseContact = async (req, res, next) => {

    if (req.query.id) {

        if (req.body.is_closed) {
            Contact.findOne({ _id: req.query.id })
                .then((item) => {
                    if (item.is_closed === false) {

                        item.is_closed = req.body.is_closed
                        item.response_date = new Date()

                        item.save().then(() => {
                            res.status(200).json({ success: true, message: `Le message a été fermer avec success` })

                        }).catch((e) => res.status(500).json({ success: false, message: `${e}` }))

                    } else {
                        res.status(400).json({ success: false, message: `Le Message a été fermer` })
                    }
                }
                )
                .catch((e) => res.status(404).json({ success: false, message: `Message non trouvé` }))
        }
        else {
            res.status(400).json({ success: false, message: `Body non trouvé` })
        }
    } else {
        res.status(400).json({ success: false, message: `Identifiant du message non trouvé` })
    }


}


