<?php

namespace App\Filament\Resources\OrderResource\Pages;

use App\Filament\Resources\OrderResource;
use App\Models\Order;
use Filament\Actions;
use Filament\Notifications\Notification;
use Filament\Resources\Pages\EditRecord;

class EditOrder extends EditRecord
{
    protected static string $resource = OrderResource::class;

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

        $actions = [];

        // تأكيد استلام المبلغ (للطرق غير النقدية)
        if (! $record->isPaymentCod() && $record->payment_status === 'pending' && $record->payment_receipt) {
            $actions[] = Actions\Action::make('confirm_payment')
                ->label('تأكيد استلام المبلغ')
                ->icon('heroicon-o-banknotes')
                ->color('success')
                ->requiresConfirmation()
                ->modalHeading('تأكيد استلام المبلغ')
                ->modalDescription('هل تم استلام المبلغ من التاجر وتأكيد صحة الإيصال؟')
                ->action(function () use ($record) {
                    $record->update(['payment_status' => 'confirmed']);
                    Notification::make()
                        ->title('تم تأكيد استلام المبلغ')
                        ->success()
                        ->send();
                    $this->redirect($this->getResource()::getUrl('edit', ['record' => $record]));
                });
        }

        $transitions = $this->getAllowedTransitions($status, $record);

        foreach ($transitions as $newStatus => $config) {
            $actions[] = Actions\Action::make("transition_{$newStatus}")
                ->label($config['label'])
                ->icon($config['icon'])
                ->color($config['color'])
                ->requiresConfirmation()
                ->modalHeading($config['label'])
                ->modalDescription($config['modal_description'] ?? "هل أنت متأكد من تغيير الحالة إلى \"{$config['target_label']}\"؟")
                ->action(function () use ($record, $newStatus, $config) {
                    $record->update(['status' => $newStatus]);
                    Notification::make()
                        ->title($config['success_message'])
                        ->success()
                        ->send();
                    $this->redirect($this->getResource()::getUrl('edit', ['record' => $record]));
                });
        }

        $actions[] = Actions\Action::make('print_invoice')
            ->label('طباعة فاتورة العميل')
            ->icon('heroicon-o-document-text')
            ->color('gray')
            ->url(fn () => route('admin.orders.invoice-pdf', ['order' => $record->id]))
            ->openUrlInNewTab();

        $actions[] = Actions\Action::make('print_waybill')
            ->label('طباعة بوليصة الشحن')
            ->icon('heroicon-o-truck')
            ->color('gray')
            ->url(fn () => route('admin.orders.waybill-pdf', ['order' => $record->id]))
            ->openUrlInNewTab();

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

        return $actions;
    }

    protected function getAllowedTransitions(string $currentStatus, Order $record): array
    {
        // منع الانتقال للشحن إذا لم يتم اعتماد الدفع (لغير النقدي)
        $cannotShip = ! $record->canProgressToShipping();

        $map = [
            Order::STATUS_PENDING => [
                Order::STATUS_PROCESSING => [
                    'label' => 'بدء التجهيز',
                    'target_label' => 'جاري التجهيز',
                    'icon' => 'heroicon-o-cog-6-tooth',
                    'color' => 'primary',
                    'success_message' => 'تم بدء تجهيز الطلب',
                    'blocked' => $cannotShip,
                    'modal_description' => $cannotShip
                        ? 'يجب تأكيد استلام المبلغ أولاً من التاجر (طريقة الدفع: ' . ($record->paymentMethod?->name ?? $record->payment_method) . ')'
                        : null,
                ],
            ],
            Order::STATUS_PENDING_SUPPLIER => [
                Order::STATUS_ORDERED_FROM_SUPPLIER => [
                    'label' => 'تم الطلب من المورد',
                    'target_label' => 'تم الطلب من المورد',
                    'icon' => 'heroicon-o-truck',
                    'color' => 'info',
                    'success_message' => 'تم تحديث الحالة',
                ],
            ],
            Order::STATUS_ORDERED_FROM_SUPPLIER => [
                Order::STATUS_RECEIVED_FROM_SUPPLIER => [
                    'label' => 'تم الاستلام من المورد',
                    'target_label' => 'تم الاستلام من المورد',
                    'icon' => 'heroicon-o-check-circle',
                    'color' => 'info',
                    'success_message' => 'تم استلام البضاعة من المورد',
                ],
            ],
            Order::STATUS_RECEIVED_FROM_SUPPLIER => [
                Order::STATUS_PROCESSING => [
                    'label' => 'بدء التجهيز',
                    'target_label' => 'جاري التجهيز',
                    'icon' => 'heroicon-o-cog-6-tooth',
                    'color' => 'primary',
                    'success_message' => 'تم بدء تجهيز الطلب',
                    'blocked' => $cannotShip,
                    'modal_description' => $cannotShip ? 'يجب تأكيد استلام المبلغ أولاً.' : null,
                ],
            ],
            Order::STATUS_PROCESSING => [
                Order::STATUS_SHIPPING => [
                    'label' => 'تسليم للشحن',
                    'target_label' => 'جاري الشحن',
                    'icon' => 'heroicon-o-truck',
                    'color' => 'warning',
                    'success_message' => 'تم تسليم الطلب لشركة الشحن',
                    'blocked' => $cannotShip,
                    'modal_description' => $cannotShip
                        ? 'يجب تأكيد استلام المبلغ أولاً قبل تسليم الطلب للشحن.'
                        : null,
                ],
            ],
            Order::STATUS_SHIPPING => [
                Order::STATUS_DELIVERED => [
                    'label' => 'تم التسليم',
                    'target_label' => 'تم التسليم',
                    'icon' => 'heroicon-o-check-badge',
                    'color' => 'success',
                    'success_message' => 'تم تسليم الطلب بنجاح وتفعيل النقاط',
                ],
            ],
            Order::STATUS_DELIVERED => [
                Order::STATUS_RETURNED => [
                    'label' => 'إرجاع الطلب',
                    'target_label' => 'مرتجع',
                    'icon' => 'heroicon-o-arrow-uturn-left',
                    'color' => 'danger',
                    'success_message' => 'تم تسجيل إرجاع الطلب',
                ],
            ],
        ];

        $result = $map[$currentStatus] ?? [];

        // إخفاء الانتقالات المحظورة (بدلاً من إظهارها مع رسالة)
        return collect($result)->filter(fn ($config) => ! ($config['blocked'] ?? false))->all();
    }

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