<?php

namespace App\Filament\Resources\SupplierResource\Pages;

use App\Filament\Resources\SupplierResource;
use App\Models\User;
use Filament\Actions;
use Filament\Notifications\Notification;
use Filament\Resources\Pages\EditRecord;
use Illuminate\Support\Str;

class EditSupplier extends EditRecord
{
    protected static string $resource = SupplierResource::class;

    protected function getHeaderActions(): array
    {
        $record = $this->record;
        $actions = [];

        if (! $record->user_id && $record->email && ! $record->is_company_warehouse) {
            $actions[] = Actions\Action::make('create_login')
                ->label('إنشاء حساب دخول')
                ->icon('heroicon-o-key')
                ->color('success')
                ->requiresConfirmation()
                ->modalHeading('إنشاء حساب دخول للمورد')
                ->modalDescription('سيتم إنشاء حساب مستخدم بالبريد الإلكتروني للمورد. يمكن للمورد الدخول من /supplier وتسجيل الدخول لتأكيد أوامر التوريد.')
                ->action(function () use ($record) {
                    $existing = User::where('email', $record->email)->first();
                    if ($existing) {
                        if ($existing->supplier) {
                            Notification::make()
                                ->title('هذا البريد مرتبط بمورد آخر')
                                ->danger()
                                ->send();
                            return;
                        }
                        $user = $existing;
                    } else {
                        $password = Str::random(10);
                        $user = User::create([
                            'name' => $record->name,
                            'email' => $record->email,
                            'password' => bcrypt($password),
                            'is_admin' => false,
                            'is_active' => true,
                        ]);
                        Notification::make()
                            ->title('تم إنشاء الحساب')
                            ->body("كلمة المرور المؤقتة: {$password} — يرجى إبلاغ المورد بتغييرها عند أول دخول")
                            ->success()
                            ->duration(15000)
                            ->send();
                    }
                    $record->update(['user_id' => $user->id]);
                    Notification::make()
                        ->title('تم ربط الحساب بالمورد بنجاح')
                        ->success()
                        ->send();
                    $this->refreshFormData(['user_id']);
                });
        }

        $actions[] = Actions\DeleteAction::make()->label('حذف');

        return $actions;
    }

    protected function getRedirectUrl(): string
    {
        return $this->getResource()::getUrl('index');
    }
}
