<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Spatie\Permission\Models\Role;

class UserController extends Controller
{
    public function index()
    {
        $users = User::with('roles')->latest()->paginate(20);
        return view('admin.kullanicilar.index', compact('users'));
    }

    public function create()
    {
        $roles = Role::with('permissions')->get();
        $rolePermissions = $roles->mapWithKeys(fn($r) => [
            $r->name => $r->permissions->pluck('name')->values()
        ]);
        return view('admin.kullanicilar.create', compact('roles', 'rolePermissions'));
    }

    public function store(Request $request)
    {
        $validated = $request->validate([
            'name'     => 'required|string|max:255',
            'email'    => 'required|email|unique:users,email',
            'password' => 'required|string|min:8|confirmed',
            'role'     => 'required|exists:roles,name',
        ]);

        $user = User::create([
            'name'              => $validated['name'],
            'email'             => $validated['email'],
            'password'          => Hash::make($validated['password']),
            'email_verified_at' => now(),
        ]);

        $user->assignRole($validated['role']);

        return redirect()->route('admin.kullanicilar.index')
            ->with('success', 'Kullanıcı oluşturuldu.');
    }

    public function show(User $kullanicilar)
    {
        // show view mevcut değil — edit sayfasına yönlendir
        return redirect()->route('admin.kullanicilar.edit', $kullanicilar);
    }

    public function edit(User $kullanicilar)
    {
        $roles = Role::with('permissions')->get();
        $rolePermissions = $roles->mapWithKeys(fn($r) => [
            $r->name => $r->permissions->pluck('name')->values()
        ]);
        return view('admin.kullanicilar.edit', [
            'user'            => $kullanicilar,
            'roles'           => $roles,
            'rolePermissions' => $rolePermissions,
        ]);
    }

    public function update(Request $request, User $kullanicilar)
    {
        $validated = $request->validate([
            'name'     => 'required|string|max:255',
            'email'    => 'required|email|unique:users,email,' . $kullanicilar->id,
            'password' => 'nullable|string|min:8|confirmed',
            'role'     => 'required|exists:roles,name',
        ]);

        // Super-admin hesabını sadece super-admin düzenleyebilir
        if ($kullanicilar->hasRole('super-admin') && !auth()->user()->hasRole('super-admin')) {
            return back()->with('error', 'Super admin hesabını düzenleme yetkiniz yok.');
        }

        // Super-admin rolü sadece super-admin tarafından atanabilir
        if ($validated['role'] === 'super-admin' && !auth()->user()->hasRole('super-admin')) {
            return back()->with('error', 'Super admin rolü atama yetkiniz yok.');
        }

        $kullanicilar->update([
            'name'  => $validated['name'],
            'email' => $validated['email'],
        ]);

        if (!empty($validated['password'])) {
            $kullanicilar->update(['password' => Hash::make($validated['password'])]);
        }

        $kullanicilar->syncRoles([$validated['role']]);

        return redirect()->route('admin.kullanicilar.index')
            ->with('success', 'Kullanıcı güncellendi.');
    }

    public function destroy(User $kullanicilar)
    {
        if ($kullanicilar->id === auth()->id()) {
            return back()->with('error', 'Kendi hesabınızı silemezsiniz.');
        }

        // super-admin rolündeki kullanıcıyı sadece super-admin silebilir
        if ($kullanicilar->hasRole('super-admin') && !auth()->user()->hasRole('super-admin')) {
            return back()->with('error', 'Super admin hesabını silme yetkiniz yok.');
        }

        $kullanicilar->delete();
        return redirect()->route('admin.kullanicilar.index')
            ->with('success', 'Kullanıcı silindi.');
    }
}