import { Server } from "linebridge"
import nodemailer from "nodemailer"
import DbManager from "@shared-classes/DbManager"

import SharedMiddlewares from "@shared-middlewares"
export default class API extends Server {
    static refName = "ems"
    static useEngine = "hyper-express"
    static routesPath = `${__dirname}/routes`
    static listen_port = process.env.HTTP_LISTEN_PORT ?? 3007

    middlewares = {
        ...SharedMiddlewares
    }

    contexts = {
        db: new DbManager(),
        mailTransporter: nodemailer.createTransport({
            host: process.env.SMTP_HOSTNAME,
            port: process.env.SMTP_PORT ?? 587,
            secure: ToBoolean(process.env.SMTP_SECURE) ?? false,
            auth: {
                user: process.env.SMTP_USERNAME,
                pass: process.env.SMTP_PASSWORD,
            },
        }),
    }

    ipcEvents = {
        "account:activation:send": require("./ipcEvents/accountActivation").default,
        "new:login": require("./ipcEvents/newLogin").default,
        "mfa:send": require("./ipcEvents/mfaSend").default,
        "apr:send": require("./ipcEvents/aprSend").default,
        "password:changed": require("./ipcEvents/passwordChanged").default,
    }

    async onInitialize() {
        await this.contexts.db.initialize()
    }
}

Boot(API)