<?php

namespace App\Filament\Resources\ConfeccionResource\Pages;

use App\Filament\Resources\ConfeccionResource;
use Filament\Actions;
use Filament\Forms;
use Filament\Resources\Pages\EditRecord;

class EditConfeccion extends EditRecord
{
    protected static string $resource = ConfeccionResource::class;

    protected function getHeaderActions(): array
    {
        return [
            Actions\DeleteAction::make(),

            Actions\Action::make('agregarRecepcion')
                ->label('Agregar recepción')
                ->modalHeading('Agregar Recepción')
                ->disabled(fn (): bool => ($this->getRecord()->faltantes ?? 0) <= 0)
                ->form([
                    Forms\Components\DatePicker::make('fecha_recepcion')->default(now())->required(),
                    Forms\Components\TextInput::make('cantidad')
                        ->numeric()
                        ->required()
                        ->minValue(1)
                        ->maxValue(fn () => $this->getRecord()->faltantes ?? 0)
                        ->helperText(fn () => 'Máximo: ' . ($this->getRecord()->faltantes ?? 0))
                        ->default(fn () => $this->getRecord()->faltantes ?? 0),

                    Forms\Components\Textarea::make('notas')
                        ->helperText('Si hay prendas defectuosas, regístralas después en "Arreglos".'),
                ])
                ->action(function (array $data): void {
                    $record = $this->getRecord();

                    try {
                        \App\Models\Recepcion::create([
                            'referencia_type' => \App\Models\Confeccion::class,
                            'referencia_id' => $record->id,
                            'cantidad' => (int) $data['cantidad'],
                            'fecha_recepcion' => $data['fecha_recepcion'],
                            'prendas_defectuosas' => 0,
                            'notas' => $data['notas'] ?? null,
                        ]);

                        \Filament\Notifications\Notification::make()
                            ->success()
                            ->title('Recepción registrada')
                            ->body('La recepción se creó correctamente.')
                            ->send();
                    } catch (\Illuminate\Validation\ValidationException $e) {
                        \Filament\Notifications\Notification::make()
                            ->danger()
                            ->title('Error')
                            ->body($e->validator->errors()->first() ?? 'Error al crear la recepción.')
                            ->send();
                    } catch (\Throwable $e) {
                        \Filament\Notifications\Notification::make()
                            ->danger()
                            ->title('Error')
                            ->body($e->getMessage())
                            ->send();
                    }

                    // Refrescar la página para ver cambios (redirigir explicitando el record para evitar error de ruta)
                    $this->redirect(route('filament.admin.resources.confeccions.edit', ['record' => $record->id]));
                }),
        ];
    }
}
