<?php 

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

		$id = encrypt_decode(filter_input(INPUT_POST, "id_compra", FILTER_SANITIZE_STRING));
		$status = filter_input(INPUT_POST, "status_compra", FILTER_SANITIZE_STRING);

		$model = new Model();

		if (!empty($id) and !empty($status)) {
			if ($status == "S") {
				$comissao = 0;
				
				$config = obter_configuracao();

				$result = $model->query("
					SELECT 
						usuario.id_indicador AS id_indicador, 
						compra.id_usuario AS id_usuario, 
						plano.porcentagem_valor_plano, 
						plano.porcentagem_comissao_plano, 
						produto.id_produto, 
						produto.valor_produto, 
						produto.id_usuario AS id_usuario_empresa,  
						produto.porcentagem_desc_empresa AS empresa, 
						produto.porcentagem_desc_cliente AS cliente,
						produto.porcentagem_cashback AS cashback 
					FROM compra 
					INNER JOIN usuario ON (compra.id_usuario = usuario.id_usuario) 
					INNER JOIN produto ON (produto.id_produto = compra.id_produto) 
					INNER JOIN plano ON (plano.id_plano = produto.id_plano) 
					WHERE 
						id_compra = :id
				", [
					":id" => $id
				]);

				$data = $result->fetch();

				if ($config->comissao_indicacao == "S" and ((ja_comprou(Session::get("id_usuario")) == false and $config->tipo_comissao == "P") or $config->tipo_comissao == "T")) {
					$comissao = $data->valor_produto * pct($data->porcentagem_comissao_plano);

					// Cadastra a comissão de venda
					$result = $model->insert("entrada", [
						"id_usuario" => $data->id_indicador,
						"valor_entrada" => $comissao,
						"descricao_entrada" => "Pagamento de Comissão de Venda do Usuário de ID: ".$data->id_usuario,
						"datahora_entrada" => date("Y-m-d H:i:s"),
						"status_entrada" => "S"
					]);

					if ($result == 0) {
						$model->rollback();
						echo "<script>window.location.href='".show_link("/compras-nao-confirmadas/?status=false")."';</script>";
					}

					// Gera o histórico da entrada
					$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")
					]);
				}

				// Inicia a distribuição de valores
				$teve_comissao = ($comissao > 0) ? "S" : "N";

				$lucro_empresa = ($data->valor_produto * pct($data->empresa));

				$cashback = !empty($data->cashback) ? ($data->valor_produto - ($data->valor_produto * pct($data->cliente))) * pct($data->cashback) : 0;

				if (!empty($data->cashback)) {
					// Cadastra de Cashback da Compra
					$result = $model->insert("saida", [
						"id_usuario" => $data->id_usuario_empresa,
						"valor_saida" => $cashback,
						"descricao_saida" => "Pagamento de Cashback da compra do produto de ID: ".$data->id_produto,
						"datahora_saida" => date("Y-m-d H:i:s"),
						"status_saida" => "S"
					]);

					if ($result > 0) {
						// Gera o histórico do pagamento de cashback
						$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();
					}

					// Cadastra de Cashback da Compra
					$result = $model->insert("entrada", [
						"id_usuario" => $data->id_usuario,
						"valor_entrada" => $cashback,
						"descricao_entrada" => "Recebimento de Cashback da compra do produto de ID: ".$data->id_produto,
						"datahora_entrada" => date("Y-m-d H:i:s"),
						"status_entrada" => "S"
					]);

					if ($result > 0) {
						// Gera o histórico do pagamento de cashback
						$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();
					}
				}

				$valor_empresa = $data->valor_produto - ($data->valor_produto * pct($data->empresa));

				$result = $model->insert("entrada", [
					"id_usuario" => $data->id_usuario_empresa,
					"valor_entrada" => $valor_empresa,
					"descricao_entrada" => "Pagamento do Valor do Produto para a Empresa",
					"datahora_entrada" => date("Y-m-d H:i:s"),
					"status_entrada" => "S"
				]);

				if ($result > 0) {
					// Gera o histórico da entrada
					$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")
					]);

					$lucro_empresa -= (($data->valor_produto - ($data->valor_produto * pct($data->cliente))) * pct($data->porcentagem_valor_plano));
					$lucro_empresa -= $comissao;
					$lucro_empresa -= $cashback;
					$lucro_empresa -= ($data->valor_produto * pct($data->cliente));

					$result = $model->insert("distribuicao", [
						"id_compra" => $id,
						"lucro_empresa" => $lucro_empresa,
						"valor_real_produto" => $valor_empresa,
						"taxa_pagamento" => 0,
						"teve_comissao" => $teve_comissao,
						"comissao_produto" => $comissao,
						"valor_cashback" => $cashback,
						"valor_rede" => (($data->valor_produto - ($data->valor_produto * pct($data->cliente))) * pct($data->porcentagem_valor_plano))
					]);

					if ($result > 0) {
						// Gera o histórico da distribuicao
						$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 "<script>window.location.href='".show_link("/compras-nao-confirmadas/?status=false")."';</script>";
						exit();
					}
				}

				// Muda o status da compra
				$result = $model->update("compra", [
					"status_compra" => $status
				],[
					"id_compra" => $id
				]);

				if ($result > 0) {	
					// Gera o histórico da avaliação da compra
					$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")
					]);

					$model->commit();
					echo "<script>window.location.href='".show_link("/compras-nao-confirmadas/?status=true")."';</script>";
				}
				else{
					$model->rollback();
					echo "<script>window.location.href='".show_link("/compras-nao-confirmadas/?status=false")."';</script>";
				}
			}
			else{
				$produto = $model->query("
					SELECT * FROM compra 
					INNER JOIN produto ON (compra.id_produto = produto.id_produto)
					WHERE 
						id_compra = :id
				", [
					":id" => $id
				])->fetch();

				$result = $model->update("produto", [
					"quantidade_produto" => ($produto->quantidade_produto + 1)
				], [
					"id_produto" => $produto->id_produto
				]);

				if ($result > 0) {
					// Gera o histórico da compra do produto
					$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")
					]);

					// Muda o status da compra
					$result = $model->update("compra", [
						"status_compra" => $status
					],[
						"id_compra" => $id
					]);

					if ($result > 0) {
						// Gera o histórico da distribuicao
						$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")
						]);

						$model->commit();
						echo "<script>window.location.href='".show_link("/compras-nao-confirmadas/?status=true")."';</script>";
					}
					else{
						$model->rollback();
						echo "<script>window.location.href='".show_link("/compras-nao-confirmadas/?status=false")."';</script>";
						exit();
					}
				}
				else{
					$model->rollback();
					echo json_encode(["status" => false]);
					exit();
				}
			}
		}
		else{
			echo "<script>window.location.href='".show_link("/compras-nao-confirmadas/?status=false")."';</script>";
			exit();
		}
	}
	else{
		show_403();
	}

?>