<?php

namespace App\Http\Requests;

use App\Models\LicitacoesProcedimentos\Processo;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;

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

    public function rules(): array
    {
        $tipoProcesso = $this->input('tipo_processo');

        $tiposPermitidos = match ($tipoProcesso) {
            'licitacao' => array_keys(Processo::TIPOS_LICITACAO),
            'procedimento' => array_keys(Processo::TIPOS_PROCEDIMENTO),
            default => [],
        };

        return [
            'tipo_processo' => ['required', Rule::in(Processo::TIPOS_PROCESSO)],
            'id_setor' => [
                'required',
                'string',
                'max:36',
                function (string $attribute, mixed $value, \Closure $fail): void {
                    if (!Processo::isValidSetorId($value)) {
                        $fail(__('O setor selecionado é inválido.'));
                    }
                },
            ],
            'ds_objeto' => ['required', 'string'],
            'nr_processo' => ['nullable', 'string', 'max:30'],
            'nr_memorando' => ['nullable', 'string', 'max:30'],
            'cd_tipo' => ['required', 'integer', Rule::in($tiposPermitidos)],
            'nr_licitacao' => ['required', 'string', 'max:30'],
            'dt_data' => ['required', 'date_format:Y-m-d'],
            'dt_encerramento' => ['nullable', 'date_format:Y-m-d'],
            'dt_hora' => ['nullable', 'date_format:H:i'],
            'ds_favorecido' => ['nullable', 'string'],
            'ds_bo' => ['nullable', 'string', 'max:50'],
            'ds_urlbo' => ['nullable', 'string', 'max:250'],
            'cd_status' => ['required', 'integer', Rule::in([1, 2, 3, 4, 5, 6, 7])],
        ];
    }
}

