<?php

namespace App\Filament\Resources\OjalPresillaResource\Pages;

use App\Filament\Resources\OjalPresillaResource;
use Filament\Resources\Pages\CreateRecord;

class CreateOjalPresilla extends CreateRecord
{
    protected static string $resource = OjalPresillaResource::class;
    
    protected static ?string $title = 'Crear';

    protected function handleRecordCreation(array $data): \Illuminate\Database\Eloquent\Model
    {
        $distribuciones = $data['distribuciones'] ?? [];
        $tipo = $data['tipo'] ?? 'accesorio';
        $ordenProduccionId = $data['orden_produccion_id'];
        $cantidadTotal = $data['cantidad_enviada'];
        $terminada = $data['terminada'] ?? false;

        // Validar que las distribuciones sumen la cantidad total
        $sumaDistribucion = array_sum(array_column($distribuciones, 'cantidad'));
        if ($sumaDistribucion != $cantidadTotal) {
            throw \Illuminate\Validation\ValidationException::withMessages([
                'distribuciones' => "La suma de las distribuciones ({$sumaDistribucion}) debe ser igual a la cantidad total ({$cantidadTotal})."
            ]);
        }

        // Crear un registro por cada proveedor
        $primerRegistro = null;
        $cantidadRegistros = count($distribuciones);
        foreach ($distribuciones as $distribucion) {
            $registro = \App\Models\Ojal::create([
                'proveedor_id' => $distribucion['proveedor_id'],
                'orden_produccion_id' => $ordenProduccionId,
                'tipo' => $tipo,
                'fecha_envio' => now(),
                'cantidad_enviada' => $distribucion['cantidad'],
                'terminada' => $terminada,
            ]);
            
            if (!$primerRegistro) {
                $primerRegistro = $registro;
            }
        }

        // Notificación de éxito
        \Filament\Notifications\Notification::make()
            ->title('Registros creados exitosamente')
            ->body("Se crearon {$cantidadRegistros} registro(s) para los proveedores.")
            ->success()
            ->send();

        // Retornar el primer registro para que Filament no falle
        return $primerRegistro;
    }

    protected function getRedirectUrl(): string
    {
        return static::getResource()::getUrl('index');
    }
}
