<?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 ?string $formMaxWidth = 'full';

    protected function getHeaderActions(): array
    {
        return [
            Action::make('submit')
                ->label(__('filament/admin/edit_work_order.submit'))
                ->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(__('filament/admin/edit_work_order.تمتقديمالأمرللاعتماد'))
                        ->send();
                    $this->redirect($this->getResource()::getUrl('edit', ['record' => $this->record]));
                }),

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

            Action::make('reject')
                ->label(__('filament/admin/edit_work_order.reject'))
                ->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(__('filament/admin/edit_work_order.تمرفضالأمر'))
                        ->send();
                    $this->redirect($this->getResource()::getUrl('edit', ['record' => $this->record]));
                }),

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

    public function getTitle(): string
    {
        return __('filament/admin/edit_work_order.title') . $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();
    }

    public static function getNavigationLabel(): string
    {
        return __('filament/admin/edit_work_order.title');
    }

}
