<?php

namespace App\Livewire\Profile;

use Illuminate\Support\Facades\Hash;
use Illuminate\Validation\Rules\Password;
use Livewire\Attributes\Layout;
use Livewire\Attributes\Title;
use Livewire\Component;

#[Layout('layouts.app')]
#[Title('الملف الشخصي')]
class UserProfile extends Component
{
    public string $name = '';
    public string $name_ar = '';
    public string $email = '';
    public string $current_password = '';
    public string $new_password = '';
    public string $new_password_confirmation = '';

    public function mount(): void
    {
        $user = auth()->user();
        $this->name = $user->name ?? '';
        $this->name_ar = $user->name_ar ?? '';
        $this->email = $user->email ?? '';
    }

    public function updateProfile(): void
    {
        $this->validate([
            'name' => 'nullable|string|max:255',
            'name_ar' => 'required|string|max:255',
            'email' => 'required|email|max:255|unique:users,email,' . auth()->id(),
        ], [
            'name_ar.required' => 'الاسم بالعربية مطلوب',
            'email.required' => 'البريد الإلكتروني مطلوب',
            'email.email' => 'صيغة البريد غير صحيحة',
            'email.unique' => 'البريد مستخدم بالفعل',
        ]);

        auth()->user()->update([
            'name' => $this->name,
            'name_ar' => $this->name_ar,
            'email' => $this->email,
        ]);

        session()->flash('success', __('تم تحديث الملف الشخصي بنجاح'));
    }

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

        if (!Hash::check($this->current_password, auth()->user()->password)) {
            $this->addError('current_password', 'كلمة المرور الحالية غير صحيحة');
            return;
        }

        auth()->user()->update([
            'password' => Hash::make($this->new_password),
        ]);

        $this->reset(['current_password', 'new_password', 'new_password_confirmation']);
        session()->flash('password_success', __('تم تغيير كلمة المرور بنجاح'));
    }

    public function render()
    {
        return view('livewire.profile.user-profile');
    }
}
