<?php 

	header("access-control-allow-origin: https://pagseguro.uol.com.br");

	if (isset($_POST["notificationType"]) and $_POST["notificationType"] == "transaction") {
		import_file(DIR_MODELS."Model.class.php");
		import_file(DIR_LIBRARIES."functions.php");
		import_file(DIR_LIBRARIES."PagSeguro/PagSeguro.class.php");

		$code = filter_input(INPUT_POST, "notificationCode", FILTER_SANITIZE_STRING);
		$id_usuario = encrypt_decode(filter_input(INPUT_GET, "usuario", FILTER_SANITIZE_STRING));

		$model = new Model();

		$config = obter_configuracao();

		if ($config->ambiente_teste_pagseguro == "S") {
			$pagseguro = new PagSeguro(false);
		}
		else{
			$pagseguro = new PagSeguro(true);
		}

		$pagseguro->setEmail($config->email_pagseguro);
		$pagseguro->setToken($config->token_pagseguro);

		$dadosNotificao = $pagseguro->getNotification($code);

		if (intval($dadosNotificao->status) == 3) {
			$usuario = $model->query("SELECT * FROM usuario WHERE id_usuario = :id", [":id" => $id_usuario])->fetch();

			// Verifica se o indicador está com a sua base da arvore cheia
			$result = $model->insert("arvore", [
				"id_pai" => obter_proximo_id($usuario->id_indicador),
				"id_filho" => $id_usuario
			]);

			if ($result > 0) {
				if (intval($config->porcentagem_adesao_admin) > 0) {
					$valor_admin = $config->valor_adesao * pct($config->porcentagem_adesao_admin);
					$result = $model->insert("entrada", [
						"id_usuario" => 1,
						"valor_entrada" => $valor_admin,
						"descricao_entrada" => "Pagamento de Adesão de Entrada do Usuário de ID: ".$id_usuario,
						"datahora_entrada" => date("Y-m-d H:i:s"),
						"status_entrada" => "S"
					]);

					if ($result <= 0) {
						$model->rollback();
						exit();
					}
				}

				if (intval($config->porcentagem_adesao_pai) > 0) {
					$valor_pai = $config->valor_adesao * pct($config->porcentagem_adesao_pai);
					$result = $model->insert("entrada", [
						"id_usuario" => $usuario->id_indicador,
						"valor_entrada" => $valor_pai,
						"descricao_entrada" => "Pagamento de Comissão de Adesão de Entrada do Usuário de ID: ".$id_usuario,
						"datahora_entrada" => date("Y-m-d H:i:s"),
						"status_entrada" => "S"
					]);

					if ($result <= 0) {
						$model->rollback();
						exit();
					}
				}

				$model->update("usuario", [
					"codigo_transacao_adesao" => $dadosNotificao->code,
					"usuario_ativo" => "S"
				], [
					"id_usuario" => $id_usuario
				]);

				$model->commit();
			}
			else{
				$model->rollback();
			}
		}
		elseif (intval($dadosNotificao->status) == 7) {
			$model->delete("usuario", [
				"id_usuario" => $id_usuario
			]);

			$model->commit();
		}
		else{
			$model->update("usuario", [
				"codigo_transacao_adesao" => $dadosNotificao->code
			], [
				"id_usuario" => $id_usuario
			]);

			$model->commit();
		}
	}

	$file = fopen("log_pagseguro.txt", "a+");

	$text = "CODE: ".$_POST["notificationCode"]." | DATETIME: ".date("Y-m-d H:i:s")." | ID_USUARIO: ".encrypt_decode($_GET["usuario"])."\n";

	fwrite($file, $text);

	fclose($file);

?>