<?php

namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;

class UserController extends BaseController
{
    public function login_page(Request $request)
    {
        return view("user.login");
    }

    public function authenticate(Request $request): \Illuminate\Http\RedirectResponse
    {
        $request->validate([
            "username" => ["required"],
            "password" => ["required"],
        ]);
        $credentials = [
            "password" => $request->post("password"),
        ];
        if (str_contains($request->post("username"), "@")) {
            $credentials["email"] = $request->post("username");
        } else {
            $credentials["name"] = $request->post("username");
        }
        if (Auth::attempt($credentials, $request->post("remember", 0) == 1)) {
            $request->session()->regenerate();
            return redirect()->intended();
        }
        return back()->withErrors([
            "username" => "无此用户",
        ]);
    }

    public function logout(Request $request)
    {
        Auth::logout();
        $request->session()->invalidate();
        $request->session()->regenerateToken();
        return redirect("/");
    }

    public function register_page(Request $request)
    {
        return view("user.register");
    }

    public function register(Request $request)
    {
        $request_payload = $request->validate([
            "name" => ["required", "unique:users"],
            "email" => ["required", "email", "unique:users"],
            "password" => ["required"],
        ]);
        $user = new User();
        $request_payload["password"] = Hash::make($request_payload["password"]);
        $user->fill($request_payload);
        $user->save();
        return redirect(route("login"));
    }
}