<?php 

	if (Session::get("tipo_usuario") != "6"){ show_403();}
	if ($_SERVER["REQUEST_METHOD"] == "POST") {
		import_file(DIR_MODELS."Model.class.php");
		import_file(DIR_LIBRARIES."functions.php");

		$cpf_usuario = filter_input(INPUT_POST, "cpf_usuario", FILTER_SANITIZE_STRING);
		$valor_compra = str_replace(",", ".", str_replace(".", "", filter_input(INPUT_POST, "valor_compra", FILTER_SANITIZE_STRING)));
		$id_plano_loja = filter_input(INPUT_POST, "id_plano_loja", FILTER_SANITIZE_NUMBER_INT);

		$id_loja = filter_input(INPUT_POST, "id_loja", FILTER_SANITIZE_NUMBER_INT);

		$model = new Model();

		if (!empty($cpf_usuario) and !empty($valor_compra) and !empty($id_plano_loja) and !empty($id_loja)) {
			if (validate_cpf($cpf_usuario) == false) {
				echo json_encode(["status" => false, "reason" => "invalid_cpf"]);
				exit();
			}

			$result = $model->issetElementInTable("usuario", [
				"cpf_usuario" => $cpf_usuario,
				"status_usuario" => "S",
				"usuario_ativo" => "S"
			]);

			if ($result == false) {
				echo json_encode(["status" => false, "reason" => "not_existing_cpf"]);
				exit();
			}

			$usuario = $model->query("
				SELECT
					id_usuario,
					id_indicador
				FROM usuario
				WHERE
					status_usuario = 'S' AND 
					usuario_ativo = 'S' AND
					cpf_usuario = :cpf
			", [
				":cpf" => $cpf_usuario
			])->fetch();

			$id_usuario = $usuario->id_usuario;

			$id_indicador = $usuario->id_indicador;

			$plano_loja = $model->query("
				SELECT
					porcentagem_plano_loja,
					porcentagem_cashback,
					porcentagem_comissao
				FROM plano_loja
				WHERE
					id_plano_loja = :id
			", [
				":id" => $id_plano_loja
			])->fetch();

			$valor_saida = $valor_compra * pct($plano_loja->porcentagem_plano_loja);

			$valor_cashback = $valor_saida * pct($plano_loja->porcentagem_cashback);

			$valor_comissao = $valor_saida * pct($plano_loja->porcentagem_comissao);

			$valor_rede = $valor_saida - $valor_comissao - $valor_cashback;

			$result = $model->insert("lancamento_compra", [
				"id_loja" => $id_loja,
				"id_usuario" => $id_usuario,
				"valor_compra" => $valor_compra,
				"valor_rede" => $valor_rede,
				"valor_cashback" => $valor_cashback,
				"valor_comissao" => $valor_comissao,
				"id_plano_loja" => $id_plano_loja,
				"data_hora_lancamento_compra" => date("Y-m-d H:i:s")
			]);

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

				// Distribuição de pagamento de 'Cashback' na rede
				$result = $model->insert("saida", [
					"id_usuario" => Session::get("id_usuario"),
					"valor_saida" => $valor_saida,
					"descricao_saida" => "Pagamento de Plano de Rede oriundo de compra na loja física",
					"datahora_saida" => date("Y-m-d H:i:s"),
					"status_saida" => "S"
				]);

				if ($result > 0) {
					// Gera o histórico
					$last_query = $model->lastQuery();
					$model->insert("historico", [
						"comando_sql" => $last_query,
						"datahora_acao" => date("Y-m-d H:i:s"),
						"id_usuario" => Session::get("id_usuario")
					]);
				}
				else{
					$model->rollback();
					echo json_encode(["status" => false]);
					exit();
				}

				if (!empty($valor_cashback)) {
					$result = $model->insert("entrada", [
						"id_usuario" => $id_usuario,
						"valor_entrada" => $valor_cashback,
						"descricao_entrada" => "Pagamento de Cashback de compra na loja física",
						"datahora_entrada" => date("Y-m-d H:i:s"),
						"status_entrada" => "S"
					]);

					if ($result > 0) {
					// Gera o histórico
						$last_query = $model->lastQuery();
						$model->insert("historico", [
							"comando_sql" => $last_query,
							"datahora_acao" => date("Y-m-d H:i:s"),
							"id_usuario" => Session::get("id_usuario")
						]);
					}
					else{
						$model->rollback();
						echo json_encode(["status" => false]);
						exit();
					}
				}

				if (!empty($valor_comissao)) {
					$result = $model->insert("entrada", [
						"id_usuario" => $id_indicador,
						"valor_entrada" => $valor_comissao,
						"descricao_entrada" => "Pagamento de Comissão de Indicação de Usuário de ID $id_usuario, que comprou em loja física",
						"datahora_entrada" => date("Y-m-d H:i:s"),
						"status_entrada" => "S"
					]);

					if ($result > 0) {
						// Gera o histórico
						$last_query = $model->lastQuery();
						$model->insert("historico", [
							"comando_sql" => $last_query,
							"datahora_acao" => date("Y-m-d H:i:s"),
							"id_usuario" => Session::get("id_usuario")
						]);
					}
					else{
						$model->rollback();
						echo json_encode(["status" => false]);
						exit();
					}
				}

				$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();
	}

?>