<?php
use Slim\Views\Twig;

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

class Mailer
{
  public static function sendMail($body)
  {
    $config = new Settings();
    $settings = $config->getSettings();
    $mailConfig = $settings["email"];
    $mail = new PHPMailer();

    switch ($body["mail_task"]) {
      case "TESTING":
        $html =
          "<h1>Hi! It's Fipamo!</h1><br>" .
          "<strong>It's just a test</strong><br>" .
          $body["content"];
        $member = Session::get("member");
        $mail->addAddress($member["email"], ""); //pull email address from current user
        $mail->Subject = "A test email";
        break;
      case "SEND_SECRET":
        $html =
          "<h1>Hi! It's Fipamo!</h1><br>" .
          "<strong>This is your secret key.</strong><br><br>" .
          "<h3>" .
          $body["secret"] .
          "</h3>" .
          "<br> Use this key to reset your password.";
        $mail->addAddress($body["email"], ""); //pull email address from current user
        $mail->Subject = "Shhhh! It's a secret!";
        break;
      default:
        return $result = [
          "type" => "noMailService",
          "message" => "Mail task is undefined. What are you doing??",
        ];
        break;
    }

    //set values based on current active protocol
    switch ($mailConfig["active"]) {
      case "option-smtp":
        $mail->setFrom($mailConfig["smtp"]["email"], "System Email");
        $mail->Host = "playvicio.us";
        $mail->Username = $mailConfig["smtp"]["email"];
        $mail->Password = $mailConfig["smtp"]["password"];

        break;
      case "option-mg":
        $mail->setFrom($mailConfig["mailgun"]["domain"], "No Reply");
        $mail->Host = "smtp.mailgun.org";
        $mail->Username = $mailConfig["mailgun"]["domain"];
        $mail->Password = $mailConfig["mailgun"]["key"];
        break;
      default:
        //no mail service
        return $result = [
          "type" => "noMailService",
          "message" => "Mail is not configured. Handle that.",
        ];
        break;
    }

    $mail->Body = $html;
    $mail->IsHTML(true);
    $mail->isSMTP();
    $mail->SMTPAuth = true;
    $mail->SMTPSecure = "ssl";
    $mail->Port = 465;

    // Uncomment for debug info
    //$mail->SMTPDebug = 4;

    /* Finally send the mail. */
    try {
      $mail->send();
      $result = ["type" => "mailSent", "message" => "Message Away!"];
    } catch (Exception $e) {
      //echo $e->errorMessage();
      $result = [
        "type" => "mailNotSent",
        "message" => "Message Not Away!",
        "error" => $e->errorMessage(),
      ];
    }

    return $result;
  }
}