<?php 

	if ($_SERVER["REQUEST_METHOD"] == "POST") {
		import_file(DIR_MODELS."Model.class.php");
		import_file(DIR_LIBRARIES."functions.php");

		$nome = filter_input(INPUT_POST, "nome_usuario", FILTER_SANITIZE_STRING);
		$cnpj = filter_input(INPUT_POST, "cnpj_usuario", FILTER_SANITIZE_STRING);
		$telefone = filter_input(INPUT_POST, "telefone_usuario", FILTER_SANITIZE_STRING);
		$data_nascimento = filter_input(INPUT_POST, "data_nascimento_usuario", FILTER_SANITIZE_STRING);
		$sexo = filter_input(INPUT_POST, "sexo_usuario", FILTER_SANITIZE_STRING);

		$id_estado = (int) filter_input(INPUT_POST, "id_estado", FILTER_SANITIZE_NUMBER_INT);
		$id_cidade = (int) filter_input(INPUT_POST, "id_cidade", FILTER_SANITIZE_NUMBER_INT);

		$email = filter_input(INPUT_POST, "email_usuario", FILTER_SANITIZE_EMAIL);
		$senha = filter_input(INPUT_POST, "senha_usuario", FILTER_SANITIZE_STRING);
		$indicador = encrypt_decode(filter_input(INPUT_POST, "indicador", FILTER_SANITIZE_STRING));

		$config = obter_configuracao();

		$model = new Model();

		if (
			!empty($nome) and 
			!empty($cnpj) and 
			!empty($data_nascimento) and 
			!empty($sexo) and 
			!empty($id_estado) and 
			!empty($id_cidade) and 
			!empty($email) and 
			!empty($senha) and 
			!empty($indicador)
		) {
			// Verifica se o cnpj já existe
			if ($model->issetElementInTable("usuario", ["cpf_usuario" => $cnpj])) {
				echo json_encode(["status" => false, "motivo" => "cnpj"]);
				exit();
			}

			// Valida o cpnj
			if (validate_cnpj($cnpj) == false) {
				echo json_encode(["status" => false, "motivo" => "cnpj_false"]);
				exit();
			}

			// Valida o data de nascimento
			if (validate_birth_date($data_nascimento) == false) {
				echo json_encode(["status" => false, "motivo" => "data_false"]);
				exit();
			}

			// Verifica se o e-mail já existe
			if ($model->issetElementInTable("usuario", ["email_usuario" => $email])) {
				echo json_encode(["status" => false, "motivo" => "email"]);
				exit();
			}

			// Cadastra o usuário
			$id_usuario = $model->insert("usuario", [
				"nome_usuario" => $nome,
				"cpf_usuario" => $cnpj,
				"telefone_usuario" => $telefone,
				"data_nascimento_usuario" => convert_date($data_nascimento),
				"sexo_usuario" => $sexo,
				"email_usuario" => $email,
				"senha_usuario" => md5($senha),
				"id_indicador" => $indicador,
				"id_tipo_usuario" => "6",
				"id_estado" => $id_estado,
				"id_cidade" => $id_cidade,
				"usuario_ativo" => "S",
				"datahora_cadastro_usuario" => date("Y-m-d H:i:s"),
				"status_usuario" => "S"
			]);

			if ($id_usuario > 0) {
				// Gera o histórico do cadastro do usuário
				$last_query = $model->lastQuery();
				$model->insert("historico", [
					"comando_sql" => $last_query,
					"datahora_acao" => date("Y-m-d H:i:s"),
					"id_usuario" => $id_usuario
				]);

				Session::reset();
				Session::set(
					[
						"id_usuario" => $id_usuario,
						"nome_usuario" => $nome,
						"email_usuario" => $email,
						"tipo_usuario" => "6",
						"id_indicador" => $indicador,
						"id_estado" => $id_estado,
						"id_cidade" => $id_cidade,
						"usuario_ativo" => "S"
					],
					[
						FILTER_SANITIZE_NUMBER_INT,
						FILTER_SANITIZE_STRING,
						FILTER_SANITIZE_EMAIL,
						FILTER_SANITIZE_NUMBER_INT,
						FILTER_SANITIZE_NUMBER_INT,
						FILTER_SANITIZE_NUMBER_INT,
						FILTER_SANITIZE_NUMBER_INT,
						FILTER_SANITIZE_STRING
					]
				);

				$model->commit();
				echo json_encode(["status" => true]);
			}
			else{
				$model->rollback();
				echo json_encode(["status" => false]);
			}
		}
		else{
			echo json_encode(["status" => false]);
			exit();
		}
	}
	else{
		show_403();
	}

?>