<?php

namespace Daniv04\HaciendaPackage\Rules;

use Closure;
use Illuminate\Contracts\Validation\Rule;
use Illuminate\Contracts\Validation\ValidationRule;



class ServiceDetailRequired implements ValidationRule
{
    /**
     * Determine if detalleServicio is required.
     *
     * @param  string  $attribute
     * @param  mixed  $value
     * @return bool
     */
    public function validate(string $attribute, mixed $value, Closure $fail): void
    {
        $request = request();
    
        $otrosCargos = $request->input('OtrosCargos', []);

        $hasExemptCodes = false; 

        foreach ($otrosCargos as $cargo) {
            $codigo = $cargo['TipoDocumentoOC'] ?? null;
            if (in_array($codigo, ['04', '08', '09', '10'])) {
                $hasExemptCodes = true;
                break;
            }
        }

        if(!$hasExemptCodes)
        {
            if (empty($value) || !is_array($value)) {
                $fail('El campo DetalleServicio es obligatorio cuando no se utilizan códigos de OtrosCargos 04, 08, 09 o 10.');
                return;
            }

            $lineasDetalle = $value['LineaDetalle'] ?? [];
            if (!is_array($lineasDetalle) || count($lineasDetalle) === 0) {
                $fail('El campo DetalleServicio.LineaDetalle debe contener al menos una línea cuando no se utilizan códigos de OtrosCargos 04, 08, 09 o 10.');
                return;
            }
        }


      


    }

    /**
     * Get the validation error message.
     *
     * @return string
     */
    public function message()
    {
        return 'The :attribute field is prohibited.';
    }
}