<?php

namespace App;

use Illuminate\Mail\Mailer;
use Illuminate\Mail\Message;
use App\Notifications\ConfirmEmail;
use \Mail;
class ActivationService {

    protected $mailer;
    protected $activationRepo;
    protected $resendAfter = 24;

    public function __construct(Mailer $mailer, ActivationRepository $activationRepo) {
        $this->mailer = $mailer;
        $this->activationRepo = $activationRepo;
    }

    public function sendActivationMail($user) {
        if ($user->activated || !$this->shouldSend($user)) {
            return;
        }

        $token = $this->activationRepo->createActivation($user);

        //$link = route('user.activate', $token);                               //Esta forma de armar el enlace de autenticación no sirve (?)
        $link= env("APP_URL")."user/activation/$token";

        $title = 'Activación de cuenta - '.env("APP_NAME");
        $content = sprintf('<p style="font-size:12pt;">Estimado aspirante:</p>
        <p style="font-size:12pt;">Gracias por registrarse en el Concurso Profesoral de la Facultad de Ingeniería de la Universidad Nacional de Colombia. </p>

        <p style="font-size:12pt;">Su código de candidato es: <span style="font-size:12pt; font-weight: bold;">%s</span></p>
        <p style="font-size:12pt;font-weight: bold;font-style: italic;">Recuerde, el código es necesario para consultar los resultados.</p>

        <p style="font-size:12pt;">Para activar su cuenta, por favor haga clic en el siguiente vínculo <a href="%s">Enlace de activación</a>.</p>

        <p style="font-size:10pt;">Si tiene algún inconveniente con el sistema de registro de hojas de vida, por favor póngase en contacto con el correo electrónico soportecd_fibog@unal.edu.co.</p>
        <p style="font-size:10pt;">En caso de tener dudas sobre el desarrollo del concurso, póngase en contacto con el correo electrónico concurso_fibog@unal.edu.co. </p>
        <p style="font-size:12pt;">Cordial saludo.</p>', $user->codigo, $link);
        try{
            Mail::send('emails.activation', ['html' => 'view','title' => $title, 'content' => $content], function ($message) use ($user)
            {
                $message->subject('Activación de cuenta - '.env("APP_NAME"));
                $message->from(env("MAIL_USERNAME"),'Activación de cuenta - '.env("APP_NAME"));
                $message->to($user->email);


            });
        }catch(\Exception $e){
            $this->activationRepo->deleteActivation($token);
            throw $e;
        }
        
    }

    public function activateUser($token) {
        $activation = $this->activationRepo->getActivationByToken($token);

        if ($activation === null) {
            return null;
        }

        $user = User::find($activation->user_id);

        $user->activated = true;

        $user->save();

        $this->activationRepo->deleteActivation($token);

        return $user;
    }

    private function shouldSend($user) {
        $activation = $this->activationRepo->getActivation($user);
        return $activation === null || strtotime($activation->created_at) + 60 * 60 * $this->resendAfter < time();
    }

}
