<?php

namespace App\Http\Controllers\Auth;

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

class LoginController extends Controller
{
    /**
     * Tampilkan formulir login aplikasi.
     */
    public function showLoginForm()
    {
        return view('auth.login');
    }

    /**
     * Proses autentikasi data masuk pengguna.
     */
    public function login(Request $request)
    {
        $request->validate([
            'email' => 'required|email',
            'password' => 'required|string|min:6',
        ], [
            'email.required' => 'Alamat email wajib diisi!',
            'email.email' => 'Format alamat email tidak valid!',
            'password.required' => 'Kata sandi wajib diisi!',
            'password.min' => 'Kata sandi minimal berisi 6 karakter!'
        ]);

        $credentials = $request->only('email', 'password');

        // Cek apakah akun terdaftar dan aktif (is_active)
        $user = DB::table('users')->where('email', $request->email)->first();

        if ($user && !$user->is_active) {
            return back()->withErrors([
                'email' => 'Akses ditolak! Akun Anda saat ini ditangguhkan (suspend) oleh Admin Provinsi.',
            ])->withInput($request->only('email'));
        }

        if (Auth::attempt($credentials, $request->has('remember'))) {
            $request->session()->regenerate();

            // SINKRONISASI SESSION SANDBOX: Sinkronkan dengan user yang baru login resmi
            session([
                'simulasi_user_id'    => $user->id,
                'simulasi_regency_id' => $user->regency_id,
                'mode_simulasi_aktif' => false
            ]);

            return redirect()->intended('/')
                ->with('success', "Selamat datang kembali, {$user->name}!");
        }

        return back()->withErrors([
            'email' => 'Alamat email atau kata sandi yang Anda masukkan salah.',
        ])->withInput($request->only('email'));
    }

    /**
     * Keluarkan pengguna dari aplikasi secara aman.
     */
    public function logout(Request $request)
    {
        Auth::logout();

        $request->session()->invalidate();
        $request->session()->regenerateToken();

        return redirect('/login')->with('success', 'Anda telah berhasil keluar dari aplikasi PRADIPA.');
    }
}