<?php

namespace App\Http\Controllers;

use App\Mail\ContactFormSubmitted;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Mail;

class ContactController extends BaseController
{
    use AuthorizesRequests, DispatchesJobs, ValidatesRequests;

    protected $errors = [];
    protected $message_success;
    protected $message_error;

    public function sendMail(Request $request) {
        $contact = new \stdClass();

        $contact->fullname = $this->checkRequired('fullname');
        $contact->email = $this->checkEmail('email');
        $contact->phone = $request->get('phone');
        $contact->message = $this->checkRequired('message');

        // Fake field for eventually bot hehehe..
        // If this hidden field is not empty, it's a bot
        $nice_field_faker = $request->get('nice_field');
        if(!empty($nice_field_faker)) {
            $this->message_error = 'Merci d\'accepter les conditions avant de procéder à l\'envoi de votre demande.';
        }

        $has_link = stristr($contact->message, 'http://') ?: stristr($contact->message, 'https://');
        if($has_link) {
            $this->message_error = 'Le contenu de votre message ne doit pas contenir de lien ou autres types de contenus pouvant être considéré comme du SPAM.<br/>Merci de modifier votre message et de réitérer votre demande.';
        }

        if(!$request->get('accept')) {
            $this->errors['accept'] = 'Merci d\'accepter les conditions avant de procéder à l\'envoi de votre demande.';
        }

        if(empty($this->errors) && empty($this->message_error)) {
            try {
                if($request->get('test')) {
                    return (new ContactFormSubmitted($contact))->render();
                }
                //Mail::to('xavier.bogillot@lcrh.fr')->send(new ContactFormSubmitted($contact));
                //Mail::to('xavier.bogillot@lcrh.fr')->send(new ContactFormSubmitted($contact));
                /*Mail::to('xavier.bogillot@lcrh.fr')
                    ->bcc('jeremy@pluma-dev.com')
                    ->send(new ContactFormSubmitted($contact));

                if(count(Mail::failures()) > 0) {
                    $this->message_error = 'Votre demande n\'a pas pu être envoyée..<br/>Merci de réessayer ultérieurement.';
                }*/

                $this->message_error = 'Nous sommes désolé, votre demande n\'a pas pu être envoyée..<br/>Merci de réessayer ultérieurement ou de <a href="mailto:arnaud.bogillot@lcrh.fr?subject=Message%20depuis%20le%20site%20internet">nous contacter directement.</a>';
            } catch (\Exception $ex) {
                if(App::hasDebugModeEnabled()) {
                    throw $ex;
                }
                $this->message_error = 'Votre demande n\'a pas pu être envoyée..<br/>Merci de réessayer ultérieurement.';
            }

            if(!$this->message_error) {
                $this->message_success = 'Merci pour votre demande.<br/>Nous vous recontacterons dans les plus brefs délais !<br/><br/><em><strong>LE CABINET RH - LCRH</strong></em>';
            }
        }

        return view('frontend.pages.contact', [
            'message_success' => $this->message_success,
            'message_error' => $this->message_error,
            'form_errors' => $this->errors,
            'form_values' => $request->all()
        ]);
    }

    private function checkRequired($fieldname) {
        $value = \request()->get($fieldname);
        if(!$value || empty(trim($value))) {
            $this->errors[$fieldname] = __('form.field.required');
        }
        return $value;
    }

    private function checkEmail($fieldname) {
        $value = \request()->get($fieldname);
        if (!filter_var($value, FILTER_VALIDATE_EMAIL)) {
            $this->errors[$fieldname] = "L'email doit être au format <strong>adresse@domaine.com</strong>";
        }
        return $value;
    }
}
