<?php


namespace App\Validations;


class FormularioValidation
{
    public static function register () {
        return [
            "titulo" => [
                'label' => 'Médico',
                'rules' => 'trim|required',
            ],
            "descricao" => [
                'label' => 'Tipo de procedimento',
                'rules' => 'trim|required',
            ],
            "id_medico" => [
                'label' => 'Data inicial',
                'rules' => 'trim|required|is_natural',
            ],
            "perguntas.*" => [
                'label' => 'Data final',
                'rules' => 'trim|required|validate_pergunta_form_register',
                'errors' => ['validate_pergunta_form_register' => 'Pergunta inválida.']
            ],
        ];
    }
    public static function validateFormularioRegistration (array $data_post): array {
        $validation_errors = [];
        if (!isset($data_post['titulo'])) {
            $validation_errors['titulo'] = 'O titulo é obrigatório.';
        } else if ($data_post['titulo'] === '') {
            $validation_errors['titulo'] = 'O titulo não pode ser vazio.';
        }
        if (!isset($data_post['descricao'])) {
            $validation_errors['descricao'] = 'O campo descricao é obrigatório.';
        } else if ($data_post['descricao'] === '') {
            $validation_errors['descricao'] = 'O campo descricao não pode ser vazio.';
        }
        if (!isset($data_post['procedimentos'])) {
            $validation_errors['procedimentos'] = 'O campo procedimentos é obrigatório.';
        } else if ($data_post['procedimentos'] === '') {
            $validation_errors['procedimentos'] = 'O campo procedimentos não pode ser vazio.';
        }

//        if (!isset($data_post['id_medico'])) {
//            $validation_errors['id_medico'] = 'O campo id_medico é obrigatório.';
//        } else if ((int)$data_post['id_medico'] == 0) {
//            $validation_errors['id_medico'] = 'O campo id_medico deve ser um número natural.';
//        }

        if (!isset($data_post['perguntas'])) {
            $validation_errors['perguntas'] = 'O campo perguntas é obrigatório.';
        } else if (is_array($data_post['perguntas'])) {
            for ($i = 0, $len = count($data_post['perguntas']); $i < $len; $i++) {
                $pergunta = $data_post['perguntas'][$i];
                if (!isset($pergunta['texto_pergunta'])) {
                    $validation_errors['perguntas'] =  'O campo texto_pergunta é obrigatório.';
                    break;
                } else if (!is_string($pergunta['texto_pergunta']) || $pergunta['texto_pergunta'] === '') {
                    $validation_errors['perguntas'] =  'O campo texto_pergunta deve ser um texto não vazio.';
                    break;
                } else if (!isset($pergunta['id_tipo_pergunta'])) {
                    $validation_errors['perguntas'] =  'O campo id_tipo_pergunta é obrigatório.';
                    break;
                } else if ((int)$pergunta['id_tipo_pergunta'] == 0) {
                    $validation_errors['perguntas'] =  'O campo id_tipo_pergunta deve ser um número natural.';
                    break;
                } else if (!isset($pergunta['obrigatorio'])) {
                    $validation_errors['perguntas'] =  'O campo obrigatorio é obrigatório.';
                    break;
                } else if ($pergunta['obrigatorio'] != '0' && $pergunta['obrigatorio'] != '1') {
                    $validation_errors['perguntas'] =  'O campo obrigatorio deve ser \'1\' ou \'0\'.';
                    break;
                } else if (isset($pergunta['opcoes'])) {
                    if (is_array($pergunta['opcoes'])) {
                        $num_opcoes = count($pergunta['opcoes']);
                        for ($j = 0; $j < $num_opcoes; $j++) {
                            if (!is_string($pergunta['opcoes'][$j]) || $pergunta['opcoes'][$j] === '') {
                                $validation_errors['perguntas'] = 'O campo opcoes deve ser um array de strings.';
                                return $validation_errors;
                            }
                        }
                    } else {
                        $validation_errors['perguntas'] =  'O campo opcoes deve ser um array de strings.';
                    }
                }
            }
        } else {
            $validation_errors['perguntas'] = 'O campo perguntas deve ser um array de perguntas.';
        }
        return $validation_errors;
    }

    public static function validateFormularioUpdate (array $data_post): array {
        $validation_errors = [];
        if (!isset($data_post['titulo'])) {
            $validation_errors['titulo'] = 'O titulo é obrigatório.';
        } else if ($data_post['titulo'] === '') {
            $validation_errors['titulo'] = 'O titulo não pode ser vazio.';
        }
        if (!isset($data_post['descricao'])) {
            $validation_errors['descricao'] = 'O campo descricao é obrigatório.';
        } else if ($data_post['descricao'] === '') {
            $validation_errors['descricao'] = 'O campo descricao não pode ser vazio.';
        }
        if (!isset($data_post['procedimentos'])) {
            $validation_errors['procedimentos'] = 'O campo procedimentos é obrigatório.';
        } else if ($data_post['procedimentos'] === '') {
            $validation_errors['procedimentos'] = 'O campo procedimentos não pode ser vazio.';
        }

//        if (!isset($data_post['id_medico'])) {
//            $validation_errors['id_medico'] = 'O campo id_medico é obrigatório.';
//        } else if ((int)$data_post['id_medico'] == 0) {
//            $validation_errors['id_medico'] = 'O campo id_medico deve ser um número natural.';
//        }

        if (!isset($data_post['perguntas'])) {
            $validation_errors['perguntas'] = 'O campo perguntas é obrigatório.';
        } else if (is_array($data_post['perguntas'])) {
            for ($i = 0, $len = count($data_post['perguntas']); $i < $len; $i++) {
                $pergunta = $data_post['perguntas'][$i];
                if (!isset($pergunta['texto_pergunta'])) {
                    $validation_errors['perguntas'] =  'O campo texto_pergunta é obrigatório.';
                    break;
                } else if (!is_string($pergunta['texto_pergunta']) || $pergunta['texto_pergunta'] === '') {
                    $validation_errors['perguntas'] =  'O campo texto_pergunta deve ser um texto não vazio.';
                    break;
                } else if (!isset($pergunta['id_tipo_pergunta'])) {
                    $validation_errors['perguntas'] =  'O campo id_tipo_pergunta é obrigatório.';
                    break;
                } else if ((int)$pergunta['id_tipo_pergunta'] == 0) {
                    $validation_errors['perguntas'] =  'O campo id_tipo_pergunta deve ser um número natural.';
                    break;
                } else if (!isset($pergunta['obrigatorio'])) {
                    $validation_errors['perguntas'] =  'O campo obrigatorio é obrigatório.';
                    break;
                } else if ($pergunta['obrigatorio'] != '0' && $pergunta['obrigatorio'] != '1') {
                    $validation_errors['perguntas'] =  'O campo obrigatorio deve ser \'1\' ou \'0\'.';
                    break;
                } else if (isset($pergunta['opcoes'])) {
                    if (is_array($pergunta['opcoes'])) {
                        $num_opcoes = count($pergunta['opcoes']);
                        for ($j = 0; $j < $num_opcoes; $j++) {
                            if (!is_string($pergunta['opcoes'][$j]) || $pergunta['opcoes'][$j] === '') {
                                $validation_errors['perguntas'] = 'O campo opcoes deve ser um array de strings.';
                                return $validation_errors;
                            }
                        }
                    } else {
                        $validation_errors['perguntas'] =  'O campo opcoes deve ser um array de strings.';
                    }
                }
            }
        } else {
            $validation_errors['perguntas'] = 'O campo perguntas deve ser um array de perguntas.';
        }
        return $validation_errors;
    }

    public static function validateFormularioUpdateSimple (array $data_post): array {
        $validation_errors = [];
        if (!isset($data_post['titulo'])) {
            $validation_errors['titulo'] = 'O titulo é obrigatório.';
        } else if ($data_post['titulo'] === '') {
            $validation_errors['titulo'] = 'O titulo não pode ser vazio.';
        }
        if (!isset($data_post['descricao'])) {
            $validation_errors['descricao'] = 'O campo descricao é obrigatório.';
        } else if ($data_post['descricao'] === '') {
            $validation_errors['descricao'] = 'O campo descricao não pode ser vazio.';
        }
        if (!isset($data_post['id_medico'])) {
            $validation_errors['id_medico'] = 'O campo id_medico é obrigatório.';
        } else if ((int)$data_post['id_medico'] == 0) {
            $validation_errors['id_medico'] = 'O campo id_medico deve ser um número natural.';
        }
        return $validation_errors;
    }
}