// @flow
import Koa from "koa";
import Router from "koa-router";
import { NotFoundError } from "../errors";
import { Mailer } from "../mailer";

const emailPreviews = new Koa();
const router = new Router();

router.get("/:type/:format", async (ctx) => {
  let mailerOutput;
  let mailer = new Mailer();
  mailer.transporter = {
    sendMail: (data) => (mailerOutput = data),
  };

  switch (ctx.params.type) {
    // case 'emailWithProperties':
    //   mailer.emailWithProperties('user@example.com', {...properties});
    //   break;
    default:
      if (Object.getOwnPropertyNames(mailer).includes(ctx.params.type)) {
        // $FlowIssue flow doesn't like this but we're ok with it
        mailer[ctx.params.type]("user@example.com");
      } else throw new NotFoundError("Email template could not be found");
  }

  if (!mailerOutput) return;

  if (ctx.params.format === "text") {
    ctx.body = mailerOutput.text;
  } else {
    ctx.body = mailerOutput.html;
  }
});

emailPreviews.use(router.routes());

export default emailPreviews;
