<?php

namespace App\Http\Controllers;

use App\Services\AdminCredentialService;
use Illuminate\Http\Request;
use Illuminate\Validation\Rules\Password;

class PasswordController extends Controller
{
    public function __construct(private AdminCredentialService $service) {}

    public function forgot()
    {
        return view('auth.forgot-password');
    }

    public function email(Request $request)
    {
        $email = $request->validate(['email' => ['required', 'email']])['email'];
        $this->service->sendResetLink($email);

        return back()->with('status', 'If an active administrator account exists, a reset link has been sent.');
    }

    public function reset(Request $request, string $token)
    {
        return view('auth.reset-password', ['token' => $token, 'email' => $request->query('email')]);
    }

    public function update(Request $request)
    {
        $data = $request->validate([
            'email' => ['required', 'email'],
            'token' => ['required', 'string'],
            'password' => ['required', 'confirmed', Password::min(12)->mixedCase()->numbers()],
        ]);
        $this->service->resetPassword($data['email'], $data['token'], $data['password']);

        return redirect()->route('login')->with('status', 'Password changed successfully. You can now sign in.');
    }

    public function change()
    {
        return view('auth.change-password');
    }

    public function storeChange(Request $request)
    {
        $data = $request->validate([
            'password' => ['required', 'confirmed', Password::min(12)->mixedCase()->numbers()],
        ]);
        $this->service->changePassword($request->user(), $data['password']);

        return redirect()->route('dashboard')->with('success', 'Your password was changed successfully.');
    }
}
