<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

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

    public function rules(): array
    {
        return [
            'basicos' => ['nullable', 'array'],
            'basicos.modalidad' => ['nullable', 'string', 'max:100'],
            'basicos.numero_contrato' => ['nullable', 'string', 'max:100'],
            'basicos.nivel_complejidad' => ['nullable', 'string', 'max:100'],
            'basicos.nivel_atencion' => ['nullable', 'string', 'max:100'],
            'basicos.poblacion_inicial' => ['nullable', 'integer', 'min:0'],
            'basicos.valor_per_capita' => ['nullable', 'numeric', 'min:0'],
            'basicos.numero_informe' => ['nullable', 'string', 'max:100'],
            'basicos.novedad_contractual' => ['nullable', 'string', 'max:1000'],
            'basicos.anexos_disponibles' => ['nullable', 'string', 'max:2000'],

            'disposiciones' => ['nullable', 'array'],
            'disposiciones.items' => ['nullable', 'array'],
            'disposiciones.items.*.item' => ['nullable', 'string'],
            'disposiciones.items.*.ponderado' => ['nullable'],
            'disposiciones.items.*.cumple' => ['nullable', 'string', 'in:SI,NO,NA'],
            'disposiciones.items.*.observaciones' => ['nullable', 'string'],

            'servicios' => ['nullable', 'array'],
            'servicios.descripcion' => ['nullable', 'string', 'max:2000'],
            'servicios.imagen' => ['nullable'],

            'registro_especial' => ['nullable', 'array'],
            'registro_especial.descripcion' => ['nullable', 'string', 'max:2000'],
            'registro_especial.imagen' => ['nullable'],

            'ejecucion' => ['nullable', 'array'],
            'verificacion3' => ['nullable', 'array'],
            'matriz' => ['nullable', 'array'],

            'indicadores' => ['nullable', 'array'],
            'indicadores_acceso' => ['nullable', 'array'],
            'indicadores_acceso.items' => ['nullable', 'array'],
            'indicadores_deteccion' => ['nullable', 'array'],
            'indicadores_deteccion.items' => ['nullable', 'array'],
            'indicadores_precursoras' => ['nullable', 'array'],
            'indicadores_precursoras.items' => ['nullable', 'array'],

            'resultados_salud' => ['nullable', 'array'],
            'resultados_salud.items' => ['nullable', 'array'],
        ];
    }

    public function withValidator($validator)
    {
        $validator->after(function ($v) {
            $items = $this->input('disposiciones.items', []);
            if (!is_array($items)) {
                return;
            }

            foreach ($items as $i => $row) {
                $cumple = strtoupper(trim($row['cumple'] ?? ''));
                $obs = trim($row['observaciones'] ?? '');
                if ($cumple === 'NO' && $obs === '') {
                    $v->errors()->add(
                        "disposiciones.items.$i.observaciones",
                        'Observaciones es obligatoria cuando Cumple = NO.'
                    );
                }
            }
        });
    }
}
