<?php

namespace App\Filament\Resources\PurchaseOrderResource\Pages;

use App\Filament\Resources\PurchaseOrderResource;
use App\Models\PurchaseOrder;
use App\Notifications\PurchaseOrderCreatedNotification;
use Filament\Actions;
use Filament\Notifications\Notification;
use Filament\Resources\Pages\EditRecord;

class EditPurchaseOrder extends EditRecord
{
    protected static string $resource = PurchaseOrderResource::class;

    protected function getHeaderActions(): array
    {
        $record = $this->record;
        $status = $record->status;

        $actions = [];

        $actions[] = Actions\Action::make('print_preparation_slip')
            ->label('إذن تجهيز')
            ->icon('heroicon-o-document-text')
            ->url(fn () => route('admin.purchase-orders.preparation-slip', ['purchaseOrder' => $record->id]))
            ->openUrlInNewTab();

        $actions[] = Actions\Action::make('notify_supplier')
            ->label('إرسال إشعار للمورد')
            ->icon('heroicon-o-bell-alert')
            ->color('info')
            ->visible(fn () => $record->supplier?->email)
            ->action(function () use ($record) {
                try {
                    $record->supplier->notify(new PurchaseOrderCreatedNotification($record->fresh()));
                    Notification::make()
                        ->title('تم إرسال الإشعار للمورد بنجاح')
                        ->success()
                        ->send();
                } catch (\Throwable $e) {
                    Notification::make()
                        ->title('فشل إرسال الإشعار: ' . $e->getMessage())
                        ->danger()
                        ->send();
                }
            });

        if ($status === PurchaseOrder::STATUS_DRAFT) {
            $actions[] = Actions\Action::make('confirm')
                ->label('تأكيد أمر الشراء')
                ->icon('heroicon-o-check-circle')
                ->color('warning')
                ->requiresConfirmation()
                ->modalHeading('تأكيد أمر الشراء')
                ->modalDescription('هل أنت متأكد من تأكيد أمر الشراء وإرساله للمورد؟')
                ->action(function () use ($record) {
                    $record->update(['status' => PurchaseOrder::STATUS_CONFIRMED]);
                    Notification::make()
                        ->title('تم تأكيد أمر الشراء')
                        ->success()
                        ->send();
                    $this->redirect($this->getResource()::getUrl('edit', ['record' => $record]));
                });
        }

        if ($status === PurchaseOrder::STATUS_CONFIRMED) {
            $actions[] = Actions\Action::make('receive')
                ->label('تم استلام البضاعة')
                ->icon('heroicon-o-check-badge')
                ->color('success')
                ->requiresConfirmation()
                ->modalHeading('استلام البضاعة')
                ->modalDescription('هل تم استلام كل البضاعة من المورد؟ سيتم تحديث المخزون وحالة الطلب المرتبط تلقائياً.')
                ->action(function () use ($record) {
                    $record->update(['status' => PurchaseOrder::STATUS_RECEIVED]);
                    Notification::make()
                        ->title('تم استلام البضاعة وتحديث المخزون')
                        ->success()
                        ->send();
                    $this->redirect($this->getResource()::getUrl('edit', ['record' => $record]));
                });
        }

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

        return $actions;
    }

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