<?php

namespace brain\utility;

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
use brain\data\Settings;
use brain\data\Session;

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