<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use App\Models\User;
use Illuminate\Validation\ValidationException;

class AuthController extends Controller
{
    /**
     * عرض صفحة تسجيل الدخول
     */
    public function showLoginForm()
    {
        // إذا كان المستخدم مسجل دخوله بالفعل، توجيه إلى المكان المناسب
        if (Auth::check()) {
            $user = Auth::user();

            // إذا كان المدير، توجيه إلى لوحة التحكم
            if ($user->user_type === 'admin') {
                return redirect()->route('admin.dashboard');
            }

            // إذا كان مستخدم عادي، توجيه إلى الصفحة الرئيسية
            return redirect()->route('home');
        }

        return view('auth.login');
    }

    /**
     * معالجة تسجيل الدخول
     */
    public function login(Request $request)
    {
        // إذا كان المستخدم مسجل دخوله بالفعل
        if (Auth::check()) {
            $user = Auth::user();

            // إذا كان المدير، توجيه إلى لوحة التحكم
            if ($user->user_type === 'admin') {
                return redirect()->route('admin.dashboard');
            }

            // إذا كان مستخدم عادي، توجيه إلى الصفحة الرئيسية
            return redirect()->route('home');
        }

        $request->validate([
            'email' => 'required|email',
            'password' => 'required|string|min:6',
        ], [
            'email.required' => 'البريد الإلكتروني مطلوب',
            'email.email' => 'البريد الإلكتروني غير صحيح',
            'password.required' => 'كلمة المرور مطلوبة',
            'password.min' => 'كلمة المرور يجب أن تكون 6 أحرف على الأقل',
        ]);

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

        // محاولة تسجيل الدخول
        if (Auth::attempt($credentials)) {
            $user = Auth::user();

            // التحقق من أن المستخدم مدير
            if ($user->user_type !== 'admin') {
                Auth::logout();
                throw ValidationException::withMessages([
                    'email' => 'ليس لديك صلاحية للوصول إلى لوحة التحكم',
                ]);
            }

            // التحقق من حالة المستخدم
            if ($user->status === 'inactive' || $user->status === 'suspended') {
                Auth::logout();
                throw ValidationException::withMessages([
                    'email' => 'حسابك معطل أو موقوف',
                ]);
            }

            $request->session()->regenerate();

            return redirect()->intended(route('admin.dashboard'));
        }

        // فشل تسجيل الدخول
        throw ValidationException::withMessages([
            'email' => 'بيانات الاعتماد غير صحيحة',
        ]);
    }

    /**
     * تسجيل الخروج
     */
    public function logout(Request $request)
    {
        Auth::logout();

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

        return redirect()->route('login');
    }

    /**
     * عرض صفحة تغيير كلمة المرور
     */
    public function showChangePasswordForm()
    {
        return view('auth.change-password');
    }

    /**
     * معالجة تغيير كلمة المرور
     */
    public function changePassword(Request $request)
    {
        $request->validate([
            'current_password' => 'required|string',
            'new_password' => 'required|string|min:8|confirmed',
        ], [
            'current_password.required' => 'كلمة المرور الحالية مطلوبة',
            'new_password.required' => 'كلمة المرور الجديدة مطلوبة',
            'new_password.min' => 'كلمة المرور الجديدة يجب أن تكون 8 أحرف على الأقل',
            'new_password.confirmed' => 'تأكيد كلمة المرور غير متطابق',
        ]);

        $user = Auth::user();

        // التحقق من كلمة المرور الحالية
        if (!Hash::check($request->current_password, $user->password)) {
            throw ValidationException::withMessages([
                'current_password' => 'كلمة المرور الحالية غير صحيحة',
            ]);
        }

        // تحديث كلمة المرور
        $user->update([
            'password' => Hash::make($request->new_password)
        ]);

        return redirect()->route('admin.dashboard')
            ->with('success', 'تم تغيير كلمة المرور بنجاح');
    }
}
