<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
use Illuminate\Validation\ValidationException;
use Illuminate\Support\Facades\Auth;
use App\Models\User;

class LoginController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Login Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles authenticating users for the application and
    | redirecting them to your home screen. The controller uses a trait
    | to conveniently provide its functionality to your applications.
    |
    */

    use AuthenticatesUsers;

    /**
     * Where to redirect users after login.
     *
     * @var string
     */
    protected $redirectTo = '/home';

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest')->except('logout');
    }

    /**
     * Attempt to log the user into the application.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return bool
     */
    protected function attemptLogin(Request $request)
    {
        // First check if user exists with email and password
        $credentials = $request->only($this->username(), 'password');

        if (Auth::validate($credentials)) {
            // User credentials are correct, now check if account is active
            $user = User::where($this->username(), $request->{$this->username()})->first();

            if ($user && $user->state !== 'active') {
                // Store that account is inactive for custom error message
                $request->session()->put('account_inactive', true);
                return false;
            }

            // Account is active, proceed with login
            return $this->guard()->attempt(
                array_merge($credentials, ['state' => 'active']),
                $request->filled('remember')
            );
        }

        return false;
    }

    /**
     * Get the failed login response instance.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Symfony\Component\HttpFoundation\Response
     *
     * @throws \Illuminate\Validation\ValidationException
     */
    protected function sendFailedLoginResponse(Request $request)
    {
        // Check if the failure was due to inactive account
        if ($request->session()->has('account_inactive')) {
            $request->session()->forget('account_inactive');

            throw ValidationException::withMessages([
                $this->username() => ['Your account is not active. Please contact the administrator.'],
            ]);
        }

        // Default invalid credentials message
        throw ValidationException::withMessages([
            $this->username() => [trans('auth.failed')],
        ]);
    }
}
