<?php

namespace Daniv04\HaciendaPackage\Services\Validators;


use Daniv04\HaciendaPackage\Rules\ValidateId;


class ReceptionDocumentValidatorService
{


    public static function rules(array $data): array
    {
        return [
            'Clave'                               => ['required', 'array'],
            'Clave.Sucursal'                      => ['nullable', 'string', 'regex:/^\d{3}$/'],
            'Clave.Terminal'                      => ['nullable', 'string', 'regex:/^\d{5}$/'],
            'Clave.TipoComprobante'               => ['required', 'string', 'in:05,06,07'],
            'Clave.SituacionComprobante'          => ['required', 'string', 'in:1,2,3'],
            'FechaEmision'                        => ['required', 'date_format:Y-m-d\TH:i:sP'],
            'Emisor'                              => ['required', 'array'],
            'Emisor.Nombre'                       => ['required', 'string', 'min:5', 'max:100'],
            'Emisor.Identificacion'               => ['required', 'array'],
            'Emisor.Identificacion.Tipo'          => ['required', 'string', 'in:01,02,03,04'],
            'Emisor.Identificacion.Numero'        => ['required', 'string', 'max:20', new ValidateId($data['Emisor']['Identificacion']['Tipo'] ?? null)],
            'Receptor'                            => ['nullable', 'array'],
            'Receptor.Nombre'                     => ['required_with:Receptor', 'string', 'min:3', 'max:100'],
            'Receptor.Identificacion'             => ['required', 'array'],
            'Receptor.Identificacion.Tipo'        => ['required_with:Receptor.Identificacion', 'string', 'in:01,02,03,04'],
            'Receptor.Identificacion.Numero'      => ['required_with:Receptor.Identificacion', 'string', 'max:20', new ValidateId($data['Receptor']['Identificacion']['Tipo'] ?? null)],
            'Detalle'                             => ['required', 'array'],
            'Detalle.Clave'                       => ['required', 'string', 'size:50'],
            'Detalle.FechaEmisionDoc'             => ['required', 'date_format:Y-m-d\TH:i:sP'],
            'Detalle.CodigoMensaje'               => ['required', 'string', 'in:1,2,3'],
            'Detalle.Mensaje'                     => ['required_if:Detalle.CodigoMensaje,2,3', 'string', 'min:5', 'max:160'],
            'Detalle.CodigoActividad'             => ['nullable', 'string', 'size:6'],
            'Detalle.CondicionImpuesto'           => ['nullable', 'string', 'in:01,02,03,04,05'],
            'Detalle.MontoTotalImpuestoAcreditar' => ['nullable', 'numeric', 'regex:/^\d{1,13}(\.\d{1,5})?$/'],
            'Detalle.MontoTotalDeGastoAplicable'  => ['nullable', 'numeric', 'regex:/^\d{1,13}(\.\d{1,5})?$/'],
            'Detalle.MontoTotalImpuesto'          => ['nullable', 'numeric', 'regex:/^\d{1,13}(\.\d{1,5})?$/'],
            'Detalle.TotalFactura'                => ['nullable', 'numeric', 'regex:/^\d{1,13}(\.\d{1,5})?$/'],
        ];
    }
}
