'use strict';

const coreClass = require("../../core");

const config = require('config');

let mailgun = null;

module.exports = class extends coreClass {
	initialize() {
		return new Promise((resolve, reject) => {
			this.setStage(1);

			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();
		});
	}

	async sendMail(data, cb) {
		try { await this._validateHook(); } catch { return; }

		if (!cb) cb = ()=>{};

		if (this.enabled) mailgun.messages().send(data, cb);
		else cb();
	}
}