<?php


namespace App\Http\Controllers\Auth;


use App\Http\Controllers\Controller;
use App\Models\EmailConfirmation;
use Illuminate\Http\Request;
use Illuminate\Support\Collection;

class ConfirmEmailController extends Controller
{
    public function resendConfirmation()
    {
        $user = user();
        /** @var EmailConfirmation[]|Collection $ec */
        $ec = $user->emailConfirmations()->valid()->get();
        $email = '';

        if ($ec->count() == 0) {
            user()->sendEmailConfirmationLink($email = $user->email);
        } else {
            user()->sendEmailConfirmationLink($email = $ec[0]->email);
        }

        flash()->success("A new confirmation link was sent to your e-mail $email"); // not important, will fade

        return back();
    }

    public function confirmEmailAndLogin(Request $request)
    {
        $input = $this->validate($request, [
            'token' => 'string|required',
        ]);

        $ec = EmailConfirmation::where('token', $input->token)->valid()->first();
        if (!$ec) abort(400, "Invalid or expired token.");

        $u = $ec->user;
        if (!$u) abort(400, "User account does not exist.");

        if ($ec->email) $u->email = $ec->email;
        $wasConfirmed = $u->confirmed;
        $u->confirmed = true;
        $u->save();
        $ec->delete();

        \Auth::login($u, true);

        if ($wasConfirmed) {
            // user just changed an e-mail
            flash()->success("Your new e-mail $ec->email was confirmed!");
        } else {
            flash()->success("Your e-mail $ec->email was confirmed, your account is now active!");
        }

        return redirect(route('profile.view', $u->name));
    }
}