<?php

namespace App\Http\Controllers\Auth;

use Phaseolies\Http\Request;
use Phaseolies\Http\Response;
use Phaseolies\Http\Response\RedirectResponse;
use Phaseolies\Utilities\Attributes\Route;
use Phaseolies\Utilities\Attributes\Mapper;
use App\Models\User;
use App\Http\Controllers\Controller;

#[Mapper(prefix: 'register', middleware: ['guest'])]
class RegisterController extends Controller
{
    /**
     * Display the registration form view.
     *
     * @return Response
     */
    #[Route('/', name: 'register')]
    public function index(): Response
    {
        return view('auth.register');
    }

    /**
     * Handle a user registration request.
     *
     * @param Request $request
     * @return RedirectResponse
     */
    #[Route('/', name: 'register', methods: ['POST'])]
    public function register(Request $request): RedirectResponse
    {
        $request->sanitize([
            'name' => 'required|min:2|max:20',
            'email' => 'required|email|unique:users|min:2|max:100',
            'password' => 'required|min:2|max:20',
            'confirm_password' => 'required|same_as:password',
        ]);

        $payload = $request
            ->pipeInputs([
                'email' => fn($input) => strtolower(trim($input)),
                'password' => fn($input) => bcrypt($input)
            ])
            ->only('name', 'email', 'password');

        User::create($payload);

        return redirect('/login')->withSuccess('User created successfully');
    }
}