const CoreClass = require("../../core.js");

const config = require("config");

let mailgun = null;

class MailModule extends CoreClass {
    constructor() {
        super("mail");
    }

    initialize() {
        return new Promise((resolve, reject) => {
            this.schemas = {
                verifyEmail: require("./schemas/verifyEmail"),
                resetPasswordRequest: require("./schemas/resetPasswordRequest"),
                passwordRequest: require("./schemas/passwordRequest"),
            };

            this.enabled = config.get("apis.mailgun.enabled");

            if (this.enabled)
                mailgun = require("mailgun-js")({
                    apiKey: config.get("apis.mailgun.key"),
                    domain: config.get("apis.mailgun.domain"),
                });

            resolve();
        });
    }

    SEND_MAIL(payload) {
        //data, cb
        return new Promise((resolve, reject) => {
            if (this.enabled)
                mailgun.messages().send(payload.data, () => {
                    resolve();
                });
            else resolve();
        });
    }

    GET_SCHEMA(payload) {
        return new Promise((resolve, reject) => {
            resolve(this.schemas[payload.schemaName]);
        });
    }
}

module.exports = new MailModule();