<?php
	// Tenta se conectar ao servidor MySQL
	include $_SERVER["DOCUMENT_ROOT"].'/inc/conexao.php';
	include $_SERVER["DOCUMENT_ROOT"].'/inc/functions.php';
	$cfg = $_SESSION["configs"];

	// ini_set('display_errors',1);
	// ini_set('display_startup_erros',1);
	// error_reporting(E_ALL);

	$urlbase = $_SERVER['SERVER_NAME'].$_SERVER ['REQUEST_URI'];
	$parts = parse_url($urlbase);
	parse_str($parts['query'], $query);
	$_GET = $query;
	$token = $_GET["token"];
	if($token == '' && isset($_SESSION["usuario"])){ $_GET["token"] = $_SESSION["usuario"]["api_token"]; $token = $_SESSION["usuario"]["api_token"]; }

	// Verifica type e permissões
	if(!isset($_GET["token"])){ $ret['error'] = 'Token inexistente ou invalido.'; $ret['status'] = 'error'; $ret['status_code'] = 'notfoundtype'; finishJSONRequest($ret); }

	// Retorno
	$ret = array();
	$ret['date'] = date('Y-m-d H:i:s');
	$datetime = date('Y-m-d H:i:s');

	// Pesquisa usuário
	$sql = $mysqli->query("SELECT usuario_id, usuario_permissoes, usuario_tipo, usuario_nome FROM usuarios WHERE usuario_api_token = '$token'");
	if(mysqli_num_rows($sql) == 0 || !isset($_GET["token"]) || $_GET["token"] == ''){ $ret['error'] = 'TOKEN invalido.'; $ret['status'] = 'error'; $ret['status_code'] = 'notfoundtype'; finishJSONRequest($ret); }

	// Pega dados do usuario
	$u = $sql->fetch_assoc();
	$userid = $u["usuario_id"];
	$perms = explode('-', $u["usuario_permissoes"]);

	// Verifica type e permissões
	if(!in_array('22', $perms) && !in_array('23', $perms)){ $ret['error'] = 'Você não possui permissões suficientes para visualizar a apuração.'; $ret['status'] = 'error'; $ret['status_code'] = 'invalidPerm'; finishJSONRequest($ret); }

	// Todos os usuários
	$users = array();
	$sql = $mysqli->query("SELECT * FROM usuarios ORDER BY usuario_nome ASC");
	while ($t = $sql->fetch_assoc()) {
		$users[$t["usuario_id"]]["id"] = $t["usuario_id"];
		$users[$t["usuario_id"]]["nome"] = utf8_encode($t["usuario_nome"]);
		$users[$t["usuario_id"]]["gerente"] = $t["usuario_gerente"];
		$users[$t["usuario_id"]]["status"] = $t["usuario_status"];
		$users[$t["usuario_id"]]["credito"] = $t["usuario_credito"];
		$users[$t["usuario_id"]]["tipo"] = $t["usuario_tipo"];
	}

	// Tipos de usuários
	$ret['users'] = array();
	$jaComputados = array();

	if($u['usuario_tipo'] == '1'){
		$sql = $mysqli->query("SELECT t1.usuario_id AS lev1, t2.usuario_id as lev2, t3.usuario_id as lev3, t4.usuario_id as lev4 FROM usuarios AS t1 LEFT JOIN usuarios AS t2 ON t2.usuario_gerente = t1.usuario_id LEFT JOIN usuarios AS t3 ON t3.usuario_gerente = t2.usuario_id LEFT JOIN usuarios AS t4 ON t4.usuario_gerente = t3.usuario_id");
	} else {
		$sql = $mysqli->query("SELECT t1.usuario_id AS lev1, t2.usuario_id as lev2, t3.usuario_id as lev3, t4.usuario_id as lev4 FROM usuarios AS t1 LEFT JOIN usuarios AS t2 ON t2.usuario_gerente = t1.usuario_id LEFT JOIN usuarios AS t3 ON t3.usuario_gerente = t2.usuario_id LEFT JOIN usuarios AS t4 ON t4.usuario_gerente = t3.usuario_id WHERE t1.usuario_id = '$userid'");
	}
	while($i = $sql->fetch_assoc()){

		// Para caso de administradores
		if($u['usuario_tipo'] == '1'){
			$i['lev4'] = $i['lev3'];
			$i['lev3'] = $i['lev2'];
			$i['lev2'] = $i['lev1'];
		}

		if((int)$i["lev2"] <> 0 && !in_array($i["lev2"], $jaComputados)){
			$aux = count($ret['users'][$_SESSION["tipos_usuarios"][$users[$i["lev2"]]["tipo"]]["nome"]]);
			$ret['users'][$_SESSION["tipos_usuarios"][$users[$i["lev2"]]["tipo"]]["nome"]][$aux]['id'] = $i["lev2"];
			$ret['users'][$_SESSION["tipos_usuarios"][$users[$i["lev2"]]["tipo"]]["nome"]][$aux]['name'] = $users[$i["lev2"]]["nome"];
			array_push($jaComputados, $i["lev2"]);
		}

		if((int)$i["lev3"] <> 0 && !in_array($i["lev3"], $jaComputados)){
			$aux = count($ret['users'][$_SESSION["tipos_usuarios"][$users[$i["lev3"]]["tipo"]]["nome"]]);
			$ret['users'][$_SESSION["tipos_usuarios"][$users[$i["lev3"]]["tipo"]]["nome"]][$aux]['id'] = $i["lev3"];
			$ret['users'][$_SESSION["tipos_usuarios"][$users[$i["lev3"]]["tipo"]]["nome"]][$aux]['name'] = $users[$i["lev3"]]["nome"];
			array_push($jaComputados, $i["lev3"]);
		}

		if((int)$i["lev4"] <> 0 && !in_array($i["lev4"], $jaComputados)){
			$aux = count($ret['users'][$_SESSION["tipos_usuarios"][$users[$i["lev4"]]["tipo"]]["nome"]]);
			$ret['users'][$_SESSION["tipos_usuarios"][$users[$i["lev4"]]["tipo"]]["nome"]][$aux]['id'] = $i["lev4"];
			$ret['users'][$_SESSION["tipos_usuarios"][$users[$i["lev4"]]["tipo"]]["nome"]][$aux]['name'] = $users[$i["lev4"]]["nome"];
			array_push($jaComputados, $i["lev4"]);
		}
	}

	// Por fim, ordena
	if(isset($ret['users']['Administradores'])){ unset($ret['users']['Administradores']); }
	$tipos = array_reverse($_SESSION["tipos_usuarios"]);
	foreach ($tipos as $k => $v) {
		$ordem = $v["nome"];
        if(isset($ret['users'][$ordem])){ $ret['users'] = array_merge( [$ordem => $ret['users'][$ordem]], $ret['users']); }
	}

	// Ordena
	function compareByName($a, $b) {
	  return strcmp($a["name"], $b["name"]);
	}

	foreach ($ret['users'] as $k => $v) {
		usort($ret['users'][$k], 'compareByName');
	}
	echo json_encode($ret);
?>