<?php

namespace App\Http\Controllers\Subadmin\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class LoginController extends Controller
{
    use AuthenticatesUsers;

    protected $username;

    public function __construct()
    {
        $this->middleware('admin.guest')->except('logout');
        $this->username = $this->findUsername();
    }

    public function showLoginForm()
    {
        $pageTitle = "Subadmin Login";
        return view('subadmin.auth.login', compact('pageTitle'));
    }

    public function checkCredentials(Request $request)
    {
        $request->validate([
            'username' => 'required|string',
            'password' => 'required|string',
        ]);

        $login = $request->username;
        $fieldType = filter_var($login, FILTER_VALIDATE_EMAIL) ? 'email' : 'username';
        
        $admin = \App\Models\Admin::where($fieldType, $login)->first();
        
        if ($admin && \Hash::check($request->password, $admin->password)) {
            if ($admin->role == 2) {
                return response()->json([
                    'status' => 'success',
                    'message' => 'Credentials verified. OTP sent!'
                ]);
            } else {
                return response()->json([
                    'status' => 'error',
                    'message' => 'This account is not authorized as a Subadmin.'
                ]);
            }
        }

        return response()->json([
            'status' => 'error',
            'message' => 'Invalid username or password.'
        ]);
    }

    public function login(Request $request)
    {
        $this->validateLogin($request);

        if (method_exists($this, 'hasTooManyLoginAttempts') &&
            $this->hasTooManyLoginAttempts($request)) {
            $this->fireLockoutEvent($request);
            return $this->sendLockoutResponse($request);
        }

        if ($this->attemptLogin($request)) {
            if (Auth::guard('admin')->user()->role != 2) {
                Auth::guard('admin')->logout();
                return redirect()->route('subadmin.login')->withErrors(['username' => 'Invalid subadmin credentials.']);
            }
            return $this->sendLoginResponse($request);
        }

        $this->incrementLoginAttempts($request);
        return $this->sendFailedLoginResponse($request);
    }

    public function findUsername()
    {
        $login = request()->input('username');
        $fieldType = filter_var($login, FILTER_VALIDATE_EMAIL) ? 'email' : 'username';
        request()->merge([$fieldType => $login]);
        return $fieldType;
    }

    public function username()
    {
        return $this->username;
    }

    protected function guard()
    {
        return Auth::guard('admin');
    }

    public function authenticated(Request $request, $user)
    {
        return redirect()->route('subadmin.dashboard');
    }

    public function logout(Request $request)
    {
        $this->guard()->logout();
        $request->session()->invalidate();
        return $this->loggedOut($request) ?: redirect()->route('subadmin.login');
    }

    public function resetPassword()
    {
        return view('admin.auth.passwords.email');
    }
}
