<?php 

	if (Session::get("tipo_usuario") != "2"){ 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_produto", FILTER_SANITIZE_STRING));
		$valor_produto = (float) filter_input(INPUT_POST, "valor_produto", FILTER_SANITIZE_STRING);
		$forma_pagamento = filter_input(INPUT_POST, "forma_pagamento", FILTER_SANITIZE_STRING);

		$model = new Model();

		$comissao = 0;

		if (!empty($id) and !empty($forma_pagamento)) {
			// Busca os dados do produto
			$produto = $model->query("
				SELECT * FROM produto 
				INNER JOIN plano ON (plano.id_plano = produto.id_plano) 
				WHERE 
					id_produto = :id
			", [
				":id" => $id
			])->fetch();

			if (!empty($produto)) {
				if ($produto->quantidade_produto <= 0) {
					echo json_encode(["status" => false, "motivo" => "quantidade"]);
					exit();
				}

				if ($forma_pagamento == "Saldo") {
					if (obter_saldo(Session::get("id_usuario")) >= $valor_produto) {
						$config = obter_configuracao();

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

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

							if ($result == 0) {
								$model->rollback();
								echo json_encode(["status" => false]);
								exit();
							}
						}

						// Cadastra a compra do produto comprado com o saldo
						$id_compra = $model->insert("compra", [
							"id_produto" => $id,
							"valor_compra" => $produto->valor_produto - ($produto->valor_produto * pct($produto->porcentagem_desc_cliente)),
							"porcentagem_empresa_compra" => $produto->porcentagem_desc_empresa,
							"forma_pagamento" => $forma_pagamento,
							"id_usuario" => Session::get("id_usuario"),
							"datahora_compra" => date("Y-m-d H:i:s"),
							"status_compra" => "S"
						]);

						if ($id_compra > 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")
							]);

							$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")
								]);
							}
							else{
								$model->rollback();
								echo json_encode(["status" => false]);
								exit();
							}

							$result = $model->insert("saida", [
								"id_usuario" => Session::get("id_usuario"),
								"valor_saida" => $produto->valor_produto - ($produto->valor_produto * pct($produto->porcentagem_desc_cliente)),
								"descricao_saida" => "Compra do Produto de ID: ".$produto->id_produto,
								"datahora_saida" => date("Y-m-d H:i:s"),
								"status_saida" => "S"
							]);

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

								$valor_empresa = $produto->valor_produto - ($produto->valor_produto * pct($produto->porcentagem_desc_empresa));

								$result = $model->insert("entrada", [
									"id_usuario" => $produto->id_usuario,
									"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")
									]);

									$teve_comissao = ($comissao > 0) ? "S" : "N";

									$lucro_empresa = ($produto->valor_produto * pct($produto->porcentagem_desc_empresa));

									$cashback = !empty($produto->porcentagem_cashback) ? ($produto->valor_produto - ($produto->valor_produto * pct($produto->porcentagem_desc_cliente))) * pct($produto->porcentagem_cashback) : 0;

									if (!empty($produto->porcentagem_cashback)) {
										// Cadastra de Cashback da Compra
										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" => Session::get("id_usuario"),
											"valor_entrada" => $cashback,
											"descricao_entrada" => "Recebimento de Cashback da compra do produto de ID: ".$produto->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();
										}
									}

									$lucro_empresa -= (($produto->valor_produto - ($produto->valor_produto * pct($produto->porcentagem_desc_cliente))) * pct($produto->porcentagem_valor_plano));
									$lucro_empresa -= $cashback;
									$lucro_empresa -= $comissao;
									$lucro_empresa -= ($produto->valor_produto * pct($produto->porcentagem_desc_cliente));

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

									if ($result) {
										// 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")
										]);

										// Lucro da Empresa 
										$result = $model->insert("entrada", [
											"id_usuario" => 1,
											"valor_entrada" => $lucro_empresa,
											"descricao_entrada" => "Lucro de Venda do Produto: ".$produto->id_produto,
											"datahora_entrada" => date("Y-m-d H:i:s"),
											"status_entrada" => "S"
										]);
		
										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 json_encode(["status" => true, "tipo" => "saldo"]);
										}
										else{
											$model->rollback();
											echo json_encode(["status" => false]);
										}
									}
									else{
										$model->rollback();
										echo json_encode(["status" => false]);
									}
								}
								else{
									$model->rollback();
									echo json_encode(["status" => false]);
								}
							}
							else{
								$model->rollback();
								echo json_encode(["status" => false]);
							}
						}
						else{
							$model->rollback();
							echo json_encode(["status" => false]);
						}
					}
					else{
						echo json_encode(["status" => false, "motivo" => "saldo"]);
						exit();
					}
				}
				elseif ($forma_pagamento == "PagSeguro") {
					import_file(DIR_LIBRARIES."PagSeguro/PagSeguro.class.php");

					// Cadastra a compra do produto
					$id_compra = $model->insert("compra", [
						"id_produto" => $id,
						"valor_compra" => $valor_produto,
						"porcentagem_empresa_compra" => $produto->porcentagem_desc_empresa,
						"forma_pagamento" => $forma_pagamento,
						"id_usuario" => Session::get("id_usuario"),
						"datahora_compra" => date("Y-m-d H:i:s"),
						"status_compra" => "E"
					]);

					if ($id_compra > 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")
						]);

						$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")
							]);
						}
						else{
							$model->rollback();
							echo json_encode(["status" => false]);
							exit();
						}

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

						$pagseguro->addItem([
							"id" => $produto->id_produto,
							"description" => $produto->nome_produto,
							"amount" => $valor_produto,
							"quantity" => 1
						]);

						$pagseguro->setReference("C".$id_compra);
						
						$pagseguro->setRedirect((isset($_SERVER["HTTPS"]) ? "https" : "http")."://".$_SERVER["HTTP_HOST"].URL_BASE."/compra-aguardando-confirmacao/?compra=".urlencode(encrypt_encode($id_compra)));

						$pagseguro->setNotification((isset($_SERVER["HTTPS"]) ? "https" : "http")."://".$_SERVER["HTTP_HOST"].URL_BASE."/atualizar-status-compra/?compra=".urlencode(encrypt_encode($id_compra)));
						
						$link_pagseguro = $pagseguro->checkout();

						$result = $model->update("compra", [
							"link_pagamento" => $link_pagseguro
						], [
							"id_compra" => $id_compra
						]);

						if ($result > 0) {
							$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 json_encode(["status" => true, "tipo" => mb_strtolower(show_slug($forma_pagamento)), "link_pagseguro" => $link_pagseguro]);
						}
						else{
							$model->rollback();
							echo json_encode(["status" => false]);
						}
					}
					else{
						$model->rollback();
						echo json_encode(["status" => false]);
					}
				}
				else{
					// Cadastra a compra do produto
					$result = $model->insert("compra", [
						"id_produto" => $id,
						"valor_compra" => $valor_produto,
						"porcentagem_empresa_compra" => $produto->porcentagem_desc_empresa,
						"forma_pagamento" => $forma_pagamento,
						"id_usuario" => Session::get("id_usuario"),
						"datahora_compra" => date("Y-m-d H:i:s"),
						"status_compra" => "E"
					]);

					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")
						]);

						$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")
							]);
						}
						else{
							$model->rollback();
							echo json_encode(["status" => false]);
							exit();
						}

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

?>