<?php

use PHPMailer\PHPMailer\Exception;
use damoclark\SimpleCors\SimpleCors;
use Jenssegers\Blade\Blade;
use Carbon\Carbon;

require '../src/Token.php';
require '../src/Mailer.php';
require '../vendor/autoload.php';

function json_response($data=null, $httpStatus = 200) {
  header("Content-Type: application/json");
  http_response_code($httpStatus);
  echo json_encode($data);
  exit();
}

$APP_PATH = dirname(__DIR__);

$cors = new SimpleCors();
$cors->handle() or exit();

$blade = new Blade($APP_PATH.'/views', $APP_PATH.'/cache');

function verify_integrity($data) {
  if (!isset($data['extra']) || $data['extra'] != '') {
    json_response([
      'message'=> 'Le message est allé directement dans les SPAMs',
      'clear'   => true,
      'err' => true
    ], 201);
  }
  if (
    !isset($data['token'])
    || !Token::isValid($data['token'])
  ) {
    json_response([
      'message' => 'Message non transmis, problème de sécurité.',
      'clear'   => false,
      'err'     => true
    ], 202);
  }
  return true;
}

function sanitize_post_data ($fieldNames, $data) {

  $output = [];
  foreach($fieldNames as $fieldName) {
    $output[$fieldName] = htmlspecialchars($data[$fieldName]);
  }
  return $output;
}

try {
  $json = file_get_contents('php://input');
  $data = (Array)json_decode($json);

  verify_integrity($data);

  $mail = Mailer::getInstance();
  $mail->addAddress('hugues.tavernier@protonmail.com', 'Hugues Tavernier');


  $data = sanitize_post_data(['name', 'email', 'message', 'subject'], $data);
  $data['website'] = 'huguestavernier.com';
  $data['date'] = Carbon::now()->locale('fr')->formatLocalized('%e %h %k:%M');
  // $data = [
  //   'name' => 'toto',
  //   'email' => 'toto@amzon.com',
  //   'message'=> 'Long message',
  //   'subject'=> 'le sujet',
  //   'website' => 'huguestavernier.com'
  // ];

  $mail->addReplyTo($data['email'], $data['name']);
  $mail->Subject = '['.$data['website'].'] '.\strip_tags($data['subject']);
  $mail->Body = $blade->render('contact', $data);
  $mail->AltBody = 'body en texte brut';

  $mail->send();
  json_response(array(
    'message'=> 'Message envoyé. Merci',
    'clear'   => true,
    'err' => false
  ));
} catch (Exception $e) {
  json_response(array(
    'message' => 'Message non transmis, erreur lors de l\'envoi.',
    'clear'   => false,
    'err' => true
  ), 500);
}
