<?php
require_once("inc/protecao-revenda.php");

// Proteção contra acesso direto
if(!preg_match("/".str_replace("http://","",str_replace("www.","",$_SERVER['HTTP_HOST']))."/i",$_SERVER['HTTP_REFERER'])) {
die("<span class='texto_status_erro'>Atenção! Acesso não autorizado, favor entrar em contato com nosso atendimento para maiores informações!</span>");
}

if(empty($_POST["bitrate"]) or empty($_POST["senha"])) {
$_SESSION["status_acao"] = '<div class="alert alert-danger text-center" role="alert">'.lang_info_campos_vazios.'</div>';
header("Location: ".$_SERVER['HTTP_REFERER']."");
exit();
}

// Valida o login contra caracteres especiais
if(!preg_match("/^[a-z0-9]+$/", $_POST["login"])) {
$_SESSION["status_acao"] = '<div class="alert alert-danger text-center" role="alert">'.lang_info_pagina_cadastrar_streaming_resultado_erro_login_invalido.'</div>';
header("Location: ".$_SERVER['HTTP_REFERER']."");
exit();
}

// Verifica se login já esta em uso
$verificacao_login = mysqli_num_rows(mysqli_query($conexao,"SELECT * FROM streamings where login = '".strtolower($_POST["login"])."'"));

if($verificacao_login > 0) {
$_SESSION["status_acao"] = '<div class="alert alert-danger text-center" role="alert">'.lang_info_pagina_cadastrar_streaming_resultado_erro_login_existente.'</div>';
header("Location: ".$_SERVER['HTTP_REFERER']."");
exit();
}

// Verifica logins restritos
$array_logins_restritos = array("web", "streaming", "home");

if(in_array($_POST["login"], $array_logins_restritos)) { 
$_SESSION["status_acao"] = '<div class="alert alert-danger text-center" role="alert">Login reservado, escolha outro. Reserved login, choose another.</div>';
header("Location: ".$_SERVER['HTTP_REFERER']."");
exit();
}

// Verifica os limites do cliente
$dados_revenda = mysqli_fetch_array(mysqli_query($conexao,"SELECT * FROM revendas WHERE codigo = '".$_SESSION["code_user_logged"]."'"));

$total_subrevendas = mysqli_num_rows(mysqli_query($conexao,"SELECT * FROM revendas WHERE codigo_revenda = '".$dados_revenda["codigo"]."' AND tipo = '2'"));
$total_streamings_subrevenda = mysqli_fetch_array(mysqli_query($conexao,"SELECT SUM(streamings) as total FROM revendas WHERE codigo_revenda = '".$dados_revenda["codigo"]."' AND tipo = '2'"));
$total_streamings_revenda = mysqli_num_rows(mysqli_query($conexao,"SELECT * FROM streamings WHERE codigo_cliente = '".$dados_revenda["codigo"]."'"));
$espectadores_subrevenda_revenda = mysqli_fetch_array(mysqli_query($conexao,"SELECT SUM(espectadores) as total FROM revendas WHERE codigo_revenda = '".$dados_revenda["codigo"]."' AND tipo = '2'"));
$espectadores_stm_revenda = mysqli_fetch_array(mysqli_query($conexao,"SELECT SUM(espectadores) as total FROM streamings WHERE codigo_cliente = '".$dados_revenda["codigo"]."'"));
$espaco_subrevenda_revenda = mysqli_fetch_array(mysqli_query($conexao,"SELECT SUM(espaco) as total FROM revendas WHERE codigo_revenda = '".$dados_revenda["codigo"]."' AND tipo = '2'"));
$espaco_revenda = mysqli_fetch_array(mysqli_query($conexao,"SELECT SUM(espaco) as total FROM streamings WHERE codigo_cliente = '".$dados_revenda["codigo"]."'"));

// Verifica se excedeu o limite de streamings do cliente
$total_streamings_revenda = $total_streamings_revenda+$total_streamings_subrevenda["total"]+1;

if($total_streamings_revenda > $dados_revenda["streamings"] && $dados_revenda["streamings"] != 999999) {
$_SESSION["status_acao"] = '<div class="alert alert-warning text-center" role="alert">'.lang_info_pagina_cadastrar_streaming_resultado_alerta_limite_streamings.'</div>';
header("Location: ".$_SERVER['HTTP_REFERER']."");
exit();
}

// Verifica se excedeu o limite de espectadores do cliente
$total_espectadores_revenda = $espectadores_revenda["total"]+$espectadores_subrevenda_revenda["total"]+$_POST["espectadores"];

if($total_espectadores_revenda > $dados_revenda["espectadores"] && $dados_revenda["espectadores"] != 999999) {
$_SESSION["status_acao"] = '<div class="alert alert-warning text-center" role="alert">'.lang_info_pagina_cadastrar_streaming_resultado_alerta_limite_espectadores.'</div>';
header("Location: ".$_SERVER['HTTP_REFERER']."");
exit();
}

// Verifica se excedeu o limite de espectadores do cliente
$total_espaco_revenda = $espaco_revenda["total"]+$espaco_subrevenda_revenda["total"]+$_POST["espaco"];

if($total_espaco_revenda > $dados_revenda["espaco"]) {
$_SESSION["status_acao"] = '<div class="alert alert-warning text-center" role="alert">'.lang_info_pagina_cadastrar_streaming_resultado_alerta_limite_espaco_ftp.'</div>';
header("Location: ".$_SERVER['HTTP_REFERER']."");
exit();
}

// Verifica se excedeu o limite de bitrate do cliente
if($_POST["bitrate"] > $dados_revenda["bitrate"]) {
$_SESSION["status_acao"] = '<div class="alert alert-warning text-center" role="alert">'.lang_info_pagina_cadastrar_streaming_resultado_alerta_limite_bitrate.'</div>';
header("Location: ".$_SERVER['HTTP_REFERER']."");
exit();
}

$permitir_alterar_senha = ($_POST["permitir_alterar_senha"]) ? "sim" : "nao";
$exibir_app_android = ($_POST["exibir_app_android"]) ? "sim" : "nao";
$lives = ($_POST["lives"]) ? "sim" : "nao";
$autenticar_live = ($_POST["autenticar_live"]) ? "sim" : "nao";
$srt_status = ($_POST["srt_status"]) ? "sim" : "nao";

$codido_servidor = ($dados_revenda["codigo_servidor_privado"] > 0) ? $dados_revenda["codigo_servidor_privado"] : $dados_config["codigo_servidor_atual"];

if($_POST["srt_status"]) {
$dados_ultima_porta_srt = mysqli_fetch_array(mysqli_query($conexao,"SELECT * FROM streamings where srt_porta > 0 ORDER by srt_porta DESC LIMIT 1"));

$srt_porta = $dados_ultima_porta_srt["srt_porta"]+1;
}

mysqli_query($conexao,"INSERT INTO streamings (codigo_cliente,codigo_servidor,login,senha,senha_transmissao,autenticar_live,espectadores,bitrate,espaco,ipcameras,ftp_dir,identificacao,data_cadastro,idioma_painel,email,permitir_alterar_senha,aplicacao,exibir_app_android,lives,srt_status,srt_porta) VALUES ('".$dados_revenda["codigo"]."','".$codido_servidor."','".strtolower($_POST["login"])."','".$_POST["senha"]."','".$_POST["senha"]."','".$autenticar_live."','".$_POST["espectadores"]."','".$_POST["bitrate"]."','".$_POST["espaco"]."','".$_POST["ipcameras"]."','/home/streaming/".strtolower($_POST["login"])."','".$_POST["identificacao"]."',NOW(),'".$_POST["idioma_painel"]."','".$_POST["email"]."','".$permitir_alterar_senha."','".$_POST["aplicacao"]."','".$exibir_app_android."','".$lives."','".$srt_status."','".$srt_porta."')") or die("Erro ao processar query.<br>Mensagem do servidor: ".mysqli_error($conexao));
$codigo_streaming = mysqli_insert_id($conexao);

// Cria o streaming no servidor Wowza
$dados_servidor = mysqli_fetch_array(mysqli_query($conexao,"SELECT * FROM servidores where codigo = '".$dados_config["codigo_servidor_atual"]."'"));

// Conexão SSH
$ssh = new SSH();
$ssh->conectar($dados_servidor["ip"],$dados_servidor["porta_ssh"]);
$ssh->autenticar("root",code_decode($dados_servidor["senha"],"D"));

if($_POST["aplicacao"] != 'live') {

// Cria a home do streaming
$ssh->executar("/bin/mkdir -v /home/streaming/".strtolower($_POST["login"]).";/bin/chown streaming.streaming /home/streaming/".strtolower($_POST["login"])."");

}

if($_POST["aplicacao"] == 'tvstation') {

// Copia a playlist demo para home do streaming
$ssh->executar("/bin/cp -vp /home/streaming/demo.mp4 /home/streaming/".strtolower($_POST["login"])."/;/bin/cp -vp /home/streaming/demo.smil /home/streaming/".strtolower($_POST["login"])."/playlists_agendamentos.smil");
// Configura a playlist demo
$ssh->executar("/usr/bin/replace LOGIN ".strtolower($_POST["login"])." -- /home/streaming/".strtolower($_POST["login"])."/playlists_agendamentos.smil;echo OK");
}

if($_POST["aplicacao"] == 'vod') {
// Cria a home do streaming
$ssh->executar("/bin/mkdir -v /home/streaming/".strtolower($_POST["login"]).";/bin/chown streaming.streaming /home/streaming/".strtolower($_POST["login"])."");
}

$aplicacao_xml = $_POST["aplicacao"];

if($_POST["autenticar_live"] == "nao") {

if($_POST["aplicacao"] == "tvstation" || $_POST["aplicacao"] == "live") {
$aplicacao_xml = $_POST["aplicacao"].'-sem-login';
}

}

$aplicacao_xml = ($dados_stm["srt_status"] == 'sim') ? "tvstation" : $aplicacao_xml;

// Ativa o streaming no Wowza
$ssh->executar("/usr/local/WowzaMediaServer/ativar ".strtolower($_POST["login"])." '".$_POST["senha"]."' ".$_POST["bitrate"]." ".$_POST["espectadores"]." ".$aplicacao_xml."");

if($_POST["srt_status"] == "sim") {
$ssh->executar("perl -i -p -e \"s/<Value>live<\/Value>/<Value>srt.stream<\/Value>/\" /usr/local/WowzaStreamingEngine/conf/".$_POST["login"]."/Application.xml;echo OK");
}

if($_POST["aplicacao"] == 'webrtc') {

if($dados_servidor["nome_principal"]) {
$servidor = $dados_servidor["nome_principal"].".".$dados_config["dominio_padrao"];
} else {
$servidor = $dados_servidor["nome"].".".$dados_config["dominio_padrao"];
}

$ssh->executar("sed -i 's/HOSTNAME/".$servidor."/g' /usr/local/WowzaStreamingEngine/conf/".strtolower($_POST["login"])."/Application.xml;echo OK");
}

$ssh->executar("/usr/bin/java -cp /usr/local/WowzaMediaServer JMXCommandLine -jmx service:jmx:rmi://localhost:8084/jndi/rmi://localhost:8085/jmxrmi -user admin -pass admin shutdownAppInstance ".$_POST["login"]."");
	
$ssh->executar("/usr/bin/java -cp /usr/local/WowzaMediaServer JMXCommandLine -jmx service:jmx:rmi://localhost:8084/jndi/rmi://localhost:8085/jmxrmi -user admin -pass admin startAppInstance ".$_POST["login"]."");

if($_POST["srt_status"] == "sim") {

$ssh->executar("mkdir /home/streaming/".$_POST["login"].";echo 'srt://0.0.0.0:".$srt_porta."' > /home/streaming/".$_POST["login"]."/srt.stream;echo OK");
	

	// Inicia o streaming da camera
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, "http://".$dados_servidor["ip"].":555/streammanager/streamAction?action=startStream&vhostName=_defaultVHost_&appName=".$_POST["login"]."%2F_definst_&streamName=srt.stream&groupId=&mediaCasterType=srt");
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($ch, CURLOPT_TIMEOUT, 5);
	curl_setopt($ch, CURLOPT_USERPWD, "admin:".code_decode($dados_servidor["senha"],"D").""); 
	curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST); 
	curl_setopt($ch, CURLOPT_USERAGENT, 'Painel de Streaming 3.0.0');
	ob_start();
	$resultado = curl_exec($ch);
	curl_close($ch);
	
}

// Loga a ação executada
mysqli_query($conexao,"INSERT INTO logs (acao,data,ip,log) VALUES ('cadastro_streaming',NOW(),'".$_SERVER['REMOTE_ADDR']."','Cadastrado streaming ".strtolower($_POST["login"])." no servidor ".$dados_servidor["nome"]." pela revenda ".$dados_revenda["nome"]."')");

// Cria o sessão do status das ações executadas e redireciona.
$_SESSION["status_acao"] = '<div class="alert alert-success text-center" role="alert">'.sprintf(lang_info_pagina_cadastrar_streaming_resultado_ok,strtolower($_POST["login"])).'</div>';

header("Location: /admin/revenda-streamings");
?>