<?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);
		$cpf = filter_input(INPUT_POST, "cpf_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($cpf) 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 cpf já existe
			if ($model->issetElementInTable("usuario", ["cpf_usuario" => $cpf])) {
				echo json_encode(["status" => false, "motivo" => "cpf"]);
				exit();
			}

			// Valida o cpf
			if (validate_cpf($cpf) == false) {
				echo json_encode(["status" => false, "motivo" => "cpf_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();
			}

			if ($config->cobrar_adesao == "S") {
				$usuario_ativo = "N";
			}
			else{
				$usuario_ativo = "S";
			}

			// Cadastra o usuário
			$id_usuario = $model->insert("usuario", [
				"nome_usuario" => $nome,
				"cpf_usuario" => $cpf,
				"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" => "2",
				"id_estado" => $id_estado,
				"id_cidade" => $id_cidade,
				"usuario_ativo" => $usuario_ativo,
				"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
				]);

				if ($config->cobrar_adesao == "S") {
					// Cria a sessão do usuário que se cadastrou
					Session::reset();
					Session::set(
						[
							"id_usuario" => $id_usuario,
							"nome_usuario" => $nome,
							"email_usuario" => $email,
							"tipo_usuario" => "2",
							"id_indicador" => $indicador,
							"id_estado" => $id_estado,
							"id_cidade" => $id_cidade,
							"usuario_ativo" => $usuario_ativo
						],
						[
							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{
					// Verifica se o indicador está com a sua base da arvore cheia
					$result = $model->insert("arvore", [
						"id_pai" => obter_proximo_id($indicador),
						"id_filho" => $id_usuario
					]);

					if ($result > 0) {	
						// Gera o histórico da inserção da arvore
						$last_query = $model->lastQuery();
						$model->insert("historico", [
							"comando_sql" => $last_query,
							"datahora_acao" => date("Y-m-d H:i:s"),
							"id_usuario" => $id_usuario
						]);

						// Cria a sessão do usuário que se cadastrou
						Session::reset();
						Session::set(
							[
								"id_usuario" => $id_usuario,
								"nome_usuario" => $nome,
								"email_usuario" => $email,
								"tipo_usuario" => "2",
								"id_indicador" => $indicador,
								"id_estado" => $id_estado,
								"id_cidade" => $id_cidade,
								"usuario_ativo" => $usuario_ativo
							],
							[
								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{
				$model->rollback();
				echo json_encode(["status" => false]);
			}
		}
		else{
			echo json_encode(["status" => false]);
			exit();
		}
	}
	else{
		show_403();
	}

?>