<?php

namespace App\Filament\Resources\WorkOrders\Pages;

use App\Filament\Resources\WorkOrders\WorkOrderResource;
use Filament\Actions\DeleteAction;
use Filament\Actions\Action;
use Filament\Resources\Pages\EditRecord;
use Filament\Notifications\Notification;

class EditWorkOrder extends EditRecord
{
    protected static string $resource = WorkOrderResource::class;

    protected function getHeaderActions(): array
    {
        return [
            Action::make('submit')
                ->label('تقديم للاعتماد')
                ->icon('heroicon-o-paper-airplane')
                ->color('warning')
                ->requiresConfirmation()
                ->visible(fn () => $this->record->status === 'draft')
                ->action(function () {
                    $this->record->update(['status' => 'submitted']);
                    Notification::make()
                        ->success()
                        ->title('تم تقديم الأمر للاعتماد')
                        ->send();
                    $this->redirect($this->getResource()::getUrl('edit', ['record' => $this->record]));
                }),

            Action::make('approve')
                ->label('اعتماد')
                ->icon('heroicon-o-check-circle')
                ->color('success')
                ->requiresConfirmation()
                ->visible(fn () => $this->record->status === 'submitted')
                ->action(function () {
                    $this->record->approve();
                    Notification::make()
                        ->success()
                        ->title('تم اعتماد الأمر بنجاح')
                        ->send();
                    $this->redirect($this->getResource()::getUrl('edit', ['record' => $this->record]));
                }),

            Action::make('reject')
                ->label('رفض')
                ->icon('heroicon-o-x-circle')
                ->color('danger')
                ->requiresConfirmation()
                ->visible(fn () => in_array($this->record->status, ['submitted', 'approved']))
                ->action(function () {
                    $this->record->reject();
                    Notification::make()
                        ->warning()
                        ->title('تم رفض الأمر')
                        ->send();
                    $this->redirect($this->getResource()::getUrl('edit', ['record' => $this->record]));
                }),

            DeleteAction::make()
                ->visible(fn () => $this->record->status === 'draft'),
        ];
    }

    public function getTitle(): string
    {
        return 'تعديل أمر تشغيل: ' . $this->record->order_no;
    }

    protected function getFormActions(): array
    {
        // Disable save button if approved or invoiced
        if (in_array($this->record->status, ['approved', 'invoiced'])) {
            return [];
        }

        return parent::getFormActions();
    }
}
