<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;

class UserAdminController extends Controller
{
    public function index()
    {
       $users = DB::table('users')
  ->select('id','name','email','role','is_active','created_at')
  ->orderBy('id','desc')
  ->get();

        // ✅ الأدوار المتاحة لإنشاء مستخدم جديد (فقط: user / super)
        $rolesForCreate = [
            'user'  => 'يوزر عادي',
            'super' => 'سوبر يوزر',
        ];

        // ✅ الأدوار المتاحة لتعديل دور مستخدم (بدون admin نهائيًا)
        $rolesForUpdate = [
            'user'  => 'يوزر عادي',
            'super' => 'سوبر يوزر',
        ];

        // ✅ تسميات لعرض الدور الحالي
        $roleLabels = [
            'admin' => 'Admin',
            'super' => 'Super',
            'user'  => 'User',
        ];

        return view('users_admin', compact('users', 'rolesForCreate', 'rolesForUpdate', 'roleLabels'));
    }

    public function store(Request $request)
    {
        $data = $request->validate([
            'name'     => ['required', 'string', 'max:255'],
            'email'    => ['required', 'email', 'max:255'],
            'password' => ['required', 'string', 'min:8'],
            'role'     => ['required', 'in:user,super'],
        ], [
            'role.in' => 'الدور يجب أن يكون: user أو super فقط',
        ]);

        $exists = DB::table('users')->where('email', $data['email'])->exists();
        if ($exists) {
            return back()->withInput()->withErrors(['email' => 'هذا الإيميل مستخدم مسبقاً']);
        }

        DB::table('users')->insert([
            'name'       => $data['name'],
            'email'      => $data['email'],
            'password'   => Hash::make($data['password']),
            'role'       => $data['role'],
            'created_at' => now(),
            'updated_at' => now(),
        ]);

        return back()->with('ok', 'تم إضافة المستخدم بنجاح');
    }

    public function updateRole(Request $request, int $userId)
    {
        // ✅ ممنوع admin نهائيًا
        $data = $request->validate([
            'role' => ['required', 'in:user,super'],
        ], [
            'role.in' => 'غير مسموح بتعيين Admin. المسموح: user أو super فقط',
        ]);

        $user = DB::table('users')->select('id', 'role')->where('id', $userId)->first();
        if (!$user) {
            return back()->withErrors(['role' => 'المستخدم غير موجود']);
        }

        // ✅ Admin ثابت لا يتغير
        if (($user->role ?? 'user') === 'admin') {
            return back()->withErrors(['role' => 'لا يمكن تعديل صلاحية Admin']);
        }

        DB::table('users')
            ->where('id', $userId)
            ->update([
                'role' => $data['role'],
                'updated_at' => now(),
            ]);

        return back()->with('ok', 'تم تحديث الصلاحية بنجاح');
    }

    public function resetPassword(Request $request, int $userId)
    {
        $data = $request->validate(
    [
        'new_password' => ['required', 'string', 'min:8'],
    ],
    [
        'new_password.required' => 'كلمة المرور الجديدة مطلوبة.',
        'new_password.min'      => 'كلمة المرور الجديدة يجب ألا تقل عن 8 أحرف.',
    ]
);

        $exists = DB::table('users')->where('id', $userId)->exists();
        if (!$exists) {
            return back()->withErrors(['new_password' => 'المستخدم غير موجود']);
        }

        DB::table('users')
            ->where('id', $userId)
            ->update([
                'password' => Hash::make($data['new_password']),
                'updated_at' => now(),
            ]);

        return back()->with('ok', 'تم تغيير كلمة المرور بنجاح');
    }





public function toggleActive($userId)
{
    $actor = auth()->user();

    $u = DB::table('users')->where('id', $userId)->first();
    if (!$u) return back()->withErrors('المستخدم غير موجود.');

    // ممنوع تعطيل/تفعيل admin نهائياً
    if (($u->role ?? 'user') === 'admin') {
        return back()->withErrors('لا يمكن تعديل حالة حساب Admin.');
    }

    // ممنوع تعدل نفسك
    if ((int)$actor->id === (int)$u->id) {
        return back()->withErrors('لا يمكنك تعديل حالة حسابك.');
    }

    // Super user: يقدر على user فقط (بدون super/admin)
    if (($actor->role ?? 'user') === 'super') {
        if (($u->role ?? 'user') !== 'user') {
            return back()->withErrors('Super User لا يمكنه تعطيل/تفعيل إلا المستخدم العادي فقط.');
        }
    }

    $new = ! (bool)($u->is_active ?? 1);

    DB::table('users')->where('id', $userId)->update([
        'is_active' => $new,
        'updated_at' => now(),
    ]);

    return back()->with('ok', $new ? 'تم تفعيل المستخدم.' : 'تم إيقاف المستخدم.');
}

public function destroy($userId)
{
    $actor = auth()->user();

    $u = DB::table('users')->where('id', $userId)->first();
    if (!$u) return back()->withErrors('المستخدم غير موجود.');

    // ممنوع حذف نفسك
    if ((int)$actor->id === (int)$u->id) {
        return back()->withErrors('لا يمكنك حذف حسابك.');
    }

    // ممنوع حذف admin
    if (($u->role ?? 'user') === 'admin') {
        return back()->withErrors('لا يمكن حذف حساب Admin.');
    }

    DB::table('users')->where('id', $userId)->delete();

    return back()->with('ok', 'تم حذف المستخدم بنجاح.');
}

}
