<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash; // Tambahan: Untuk enkripsi password saat register
use App\Models\User; // Tambahan: Untuk menyimpan data baru ke tabel users

class AuthController extends Controller
{
    /**
     * Menampilkan halaman login
     */
    public function showLogin()
    {
        // Pastikan jika user sudah login, mereka langsung dialihkan ke dashboard
        if (Auth::check()) {
            return redirect()->route('dashboard');
        }
        
        return view('login');
    }

    /**
     * Memproses data form login
     */
    public function prosesLogin(Request $request)
    {
        // 1. Validasi input dari form
        $credentials = $request->validate([
            'email' => ['required', 'email'],
            'password' => ['required'],
        ]);

        // Cek fitur "Remember Me"
        $remember = $request->has('remember');

        // 2. Proses Autentikasi (mencocokkan email & password ke DB)
        if (Auth::attempt($credentials, $remember)) {
            // Jika sukses, buat ulang session (keamanan)
            $request->session()->regenerate();

            // Alihkan ke halaman dashboard
            return redirect()->intended('dashboard')
                ->with('success', 'Selamat datang kembali!');
        }

        // 3. Jika gagal, kembalikan ke halaman login dengan pesan error
        return back()->withErrors([
            'email' => 'Email atau password yang Anda masukkan salah.',
        ])->onlyInput('email');
    }

    /**
     * Menampilkan halaman register
     */
    public function showRegister()
    {
        // Jika sudah login, tidak boleh mengakses halaman register, lempar ke dashboard
        if (Auth::check()) {
            return redirect()->route('dashboard');
        }

        return view('register');
    }

    /**
     * Memproses pendaftaran akun baru
     */
    public function prosesRegister(Request $request)
    {
        // 1. Validasi data input dari form register
        $request->validate([
            'name'     => ['required', 'string', 'max:255'],
            'email'    => ['required', 'string', 'email', 'max:255', 'unique:users'], // Email wajib unik di database
            'password' => ['required', 'string', 'min:8', 'confirmed'], // 'confirmed' mencocokkan input dengan password_confirmation
        ], [
            // Kustomisasi pesan error ke Bahasa Indonesia agar user friendly
            'name.required'      => 'Nama lengkap wajib diisi.',
            'email.required'     => 'Alamat email wajib diisi.',
            'email.email'        => 'Format email tidak valid.',
            'email.unique'       => 'Alamat email ini sudah terdaftar.',
            'password.required'  => 'Password wajib diisi.',
            'password.min'       => 'Password minimal harus 8 karakter.',
            'password.confirmed' => 'Konfirmasi password tidak cocok dengan password utama.',
        ]);

        // 2. Simpan data user baru ke dalam database melalui model User
        $user = User::create([
            'name'     => $request->name,
            'email'    => $request->email,
            'password' => Hash::make($request->password), // Password wajib di-hash demi alasan keamanan data
        ]);

        // 3. Otomatis loginkan user yang barusan mendaftar
        Auth::login($user);

        // 4. Regenerasi session demi keamanan setelah login berhasil
        $request->session()->regenerate();

        // 5. Alihkan user langsung ke dashboard dengan flash message sukses
        return redirect()->route('dashboard')
            ->with('success', 'Akun Anda berhasil dibuat dan Anda otomatis masuk ke sistem!');
    }

    /**
     * Memproses Logout
     */
    public function logout(Request $request)
    {
        Auth::logout();

        // Hancurkan session lama
        $request->session()->invalidate();
        $request->session()->regenerateToken();

        // Kembalikan ke halaman login
        return redirect()->route('login')
            ->with('success', 'Anda telah berhasil logout.');
    }
}