<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;

class RecetaRequest extends FormRequest
{
    public function authorize(): bool
    {
        return true;
    }

    public function rules(): array
    {
        $recetaId = $this->route('receta') ? $this->route('receta')->id : null;

        return [
            'nombre'        => [
                'required', 
                'string', 
                'max:150',
                Rule::unique('recetas', 'nombre')->ignore($recetaId)
            ],
            'porciones'     => ['required', 'numeric', 'min:0.01'],
            'costo_esperado'=> ['required', 'numeric', 'min:0'],
            'preparacion'   => ['nullable', 'string'],
            'activa'        => ['nullable', 'boolean'],
            
            // Validación de los ingredientes de la receta
            'ingredientes'  => ['required', 'array', 'min:1'],
            'ingredientes.*.insumo_id' => [
                'required', 
                'integer',
                'exists:insumos,id',
                // Un mismo insumo no puede repetirse en los ingredientes de esta receta (validación a nivel DB via Rule)
                // Se valida también a nivel request en capa frontend
            ],
            'ingredientes.*.cantidad' => ['required', 'numeric', 'min:0.001'],
        ];
    }

    public function messages(): array
    {
        return [
            'nombre.unique' => 'Ya existe una receta con este nombre.',
            'ingredientes.required' => 'La receta debe tener al menos un ingrediente.',
        ];
    }
}
