<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use App\Mail\ResetPasswordMail;
use Illuminate\Foundation\Auth\SendsPasswordResetEmails;
use Illuminate\Foundation\Auth\ThrottlesLogins;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Password;

class ForgotPasswordController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Password Reset Controller
    |--------------------------------------------------------------------------
    |
    | This controller is responsible for handling password reset emails and
    | includes a trait which assists in sending these notifications from
    | your application to your users. Feel free to explore this trait.
    |
    */

    use SendsPasswordResetEmails, ThrottlesLogins;

    public function sendResetLinkEmail(Request $request)
    {
        $request->validate(['email' => 'required|email']);
        if (!empty($request->website)) {
            // bot detectado
            sleep(3); // atraso para punir robôs
            return back()->with('status', 'Se encontramos sua conta, enviamos um link para redefinir sua senha.');
        }

        $email = strtolower(trim($request->email));
        $user = \App\User::whereRaw('LOWER(email) = ?', [$email])->first();

        if ($user) {

            $token = Password::createToken($user);
            $url = url('admin/password/reset/' . $token . '?email=' . urlencode($user->email));
            Mail::to($user->email)->send(new ResetPasswordMail($user, $url));
        }

        return back()->with('status', 'Se encontramos sua conta, enviamos um link para redefinir sua senha.');
    }

    protected function sendResetLinkResponse(Request $request, $response)
    {
        return back()->with('status', 'Se encontramos sua conta, enviamos um e-mail com instruções para redefinir a senha.');
    }

    protected function sendResetLinkFailedResponse(Request $request, $response)
    {
        // MANTER A MESMA MENSAGEM INDEPENDENTE DO ERRO
        return back()->with('status', 'Se encontramos sua conta, enviamos um e-mail com instruções para redefinir a senha.');
    }

    protected function maxAttempts()
    {
        return 4; // 5 tentativas
    }

    protected function decayMinutes()
    {
        return 20; // bloqueia por 1 minuto
    }
}
