<?php
ini_set("memory_limit", "256M");
ini_set("max_execution_time", 3600);
ini_set("date.timezone","America/Sao_Paulo");

require_once("/home/painel/public_html/admin/inc/conecta.php");
require_once("/home/painel/public_html/admin/inc/funcoes.php");
require_once("/home/painel/public_html/admin/inc/classe.ssh.php");

parse_str($argv[1],$opcoes);

list($inicial,$final) = explode("-",$opcoes["registros"]);

echo "[".date("d/m/Y H:i:s")."] Processo Iniciado.\n";

$hora_atual_servidor = date("H:i");

$query1 = mysqli_query($conexao,"SELECT * FROM playlists_agendamentos ORDER by codigo ASC LIMIT ".$inicial.", ".$final."");
while ($dados_agendamento = mysqli_fetch_array($query1)) {

$dados_stm = mysqli_fetch_array(mysqli_query($conexao,"SELECT * FROM streamings where codigo = '".$dados_agendamento["codigo_stm"]."'"));
$dados_playlist = mysqli_fetch_array(mysqli_query($conexao,"SELECT * FROM playlists where codigo = '".$dados_agendamento["codigo_playlist"]."'"));
$dados_playlist_finalizacao = mysqli_fetch_array(mysqli_query($conexao,"SELECT * FROM playlists where codigo = '".$dados_agendamento["codigo_playlist_finalizacao"]."'"));

$timezone = (empty($dados_stm["timezone"]) || strlen($dados_stm["timezone"]) < 4) ? "America/Sao_Paulo" : $dados_stm["timezone"];

$hora_inicio = sprintf("%02d",$dados_agendamento["hora"]).":".sprintf("%02d",$dados_agendamento["minuto"]);
$hora_atual = formatar_data("H:i", $hora_atual_servidor, $timezone);
$data_atual = date("Y-m-d");

if($dados_stm["status"] == 1) {

$dados_servidor = mysqli_fetch_array(mysqli_query($conexao,"SELECT * FROM servidores where codigo = '".$dados_stm["codigo_servidor"]."'"));

if($dados_servidor["status"] == "on") {

//////////////////////////////////////////////////////////////
//// Frequência 1 -> Executar em data específica(uma vez) ////
//////////////////////////////////////////////////////////////

if($dados_agendamento["frequencia"] == 1) {

// Verifica se a data específica é hoje e se esta na hora de iniciar
if($dados_agendamento["data"] == $data_atual && $hora_inicio == $hora_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"));

echo "[0x01][".$dados_stm["porta"]."][".$dados_agendamento["frequencia"]."][".date_default_timezone_get()."][".$timezone."][".$hora_atual_servidor."][".$hora_inicio."] Iniciando playlist ".$dados_playlist["nome"]." em ".$dados_agendamento["data"]." as ".$hora_inicio."\n";

// Mistura as musicas se for o caso
if($dados_agendamento["misturar_musicas"] == "sim") {
$ssh->executar("echo ok;shuf /home/streaming/playlists/".$dados_playlist["arquivo"]." --output=/home/streaming/playlists/".$dados_stm["porta"].".temp");
} else {
$ssh->executar("cp -fv /home/streaming/playlists/".$dados_playlist["arquivo"]." /home/streaming/playlists/".$dados_stm["porta"].".temp");
}

// Configura a playlist que sera executada no final se for o caso
if($dados_agendamento["finalizacao"] == "iniciar_playlist") {

$ssh->executar("cp -v /home/streaming/playlists/".$dados_playlist_finalizacao["arquivo"]." /home/streaming/playlists/".$dados_stm["porta"].".end;cat /home/streaming/playlists/".$dados_stm["porta"].".end >> /home/streaming/playlists/".$dados_stm["porta"].".temp;cp -f /home/streaming/playlists/".$dados_stm["porta"].".temp /home/streaming/playlists/".$dados_stm["porta"].".pls;rm -f /home/streaming/playlists/".$dados_stm["porta"].".end /home/streaming/playlists/".$dados_stm["porta"].".temp; echo OK");

} else {
$ssh->executar("rm -f /home/streaming/playlists/".$dados_stm["porta"].".pls;cp -f /home/streaming/playlists/".$dados_stm["porta"].".temp /home/streaming/playlists/".$dados_stm["porta"].".pls; rm -f /home/streaming/playlists/".$dados_stm["porta"].".temp;echo OK");
}

sleep(3);

$verifica_agendamento_reload = $ssh->executar("tail -n 15 /home/streaming/logs/autodj-".$dados_stm["porta"].".log | grep -c 'Reloading playlist'");

if(str_replace("\n","",$verifica_agendamento_reload) == 0) {

$ssh->executar('echo "'.date("Y/m/d H:i:s").' [robot_agendamento:start] Nova playlist nao detectada, iniciando nova playlist com URI..." >> /home/streaming/logs/autodj-'.$dados_stm["porta"].'.log;(echo '.$dados_stm["porta"].'.pls.reload;echo quit;echo quit) | curl telnet://localhost:'.$dados_stm["porta_telnet"].';echo OK;sleep 1');
}

if($dados_agendamento["inicio"] == 1) {
$ssh->executar('(echo '.$dados_stm["porta"].'.pls.fush_queue;echo quit;echo quit) | curl telnet://localhost:'.$dados_stm["porta_telnet"].';echo "'.date("Y/m/d H:i:s").' [robot_agendamento:fush_queue] Proxima musica na queue apagada" >> /home/streaming/logs/autodj-'.$dados_stm["porta"].'.log;echo OK');

$ssh->executar('(echo pular;echo quit;echo quit) | curl telnet://localhost:'.$dados_stm["porta_telnet"].';echo "'.date("Y/m/d H:i:s").' [robot_agendamento:skip] Musica atual pulada" >> /home/streaming/logs/autodj-'.$dados_stm["porta"].'.log;echo OK');
} else {
$ssh->executar('(echo '.$dados_stm["porta"].'.pls.fush_queue;echo quit;echo quit) | curl telnet://localhost:'.$dados_stm["porta_telnet"].';echo "'.date("Y/m/d H:i:s").' [robot_agendamento:fush_queue] Proxima musica na queue apagada" >> /home/streaming/logs/autodj-'.$dados_stm["porta"].'.log;echo OK');
}

// Atualiza a última playlist tocada
mysqli_query($conexao,"Update streamings set ultima_playlist = '".$dados_playlist["codigo"]."' where codigo = '".$dados_stm["codigo"]."'");

// Loga a ação executada
mysqli_query($conexao,"INSERT INTO playlists_agendamentos_logs (codigo_agendamento,codigo_stm,data,playlist) VALUES ('".$dados_agendamento["codigo"]."','".$dados_stm["codigo"]."',NOW(),'".$dados_playlist["nome"]."')");

// Remove o agendamento
mysqli_query($conexao,"Delete From playlists_agendamentos where codigo = '".$dados_agendamento["codigo"]."'");

} // FIM -> Verifica se esta na hora de iniciar / Frequência 1

} elseif($dados_agendamento["frequencia"] == 2) { // Else -> frequencia 2

//////////////////////////////////////////////
//// Frequência 2 -> Executar Diariamente ////
//////////////////////////////////////////////

// Verifica se esta na hora de iniciar
if($hora_inicio == $hora_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"));

echo "[0x02][".$dados_stm["porta"]."][".$dados_agendamento["frequencia"]."][".date_default_timezone_get()."][".$timezone."][".$hora_atual_servidor."][".$hora_inicio."] Iniciando playlist ".$dados_playlist["nome"]." as ".$hora_inicio."\n";

// Mistura as musicas se for o caso
if($dados_agendamento["misturar_musicas"] == "sim") {
$ssh->executar("echo ok;shuf /home/streaming/playlists/".$dados_playlist["arquivo"]." --output=/home/streaming/playlists/".$dados_stm["porta"].".temp");
} else {
$ssh->executar("cp -fv /home/streaming/playlists/".$dados_playlist["arquivo"]." /home/streaming/playlists/".$dados_stm["porta"].".temp");
}

// Configura a playlist que sera executada no final se for o caso
if($dados_agendamento["finalizacao"] == "iniciar_playlist") {

$ssh->executar("cp -v /home/streaming/playlists/".$dados_playlist_finalizacao["arquivo"]." /home/streaming/playlists/".$dados_stm["porta"].".end;cat /home/streaming/playlists/".$dados_stm["porta"].".end >> /home/streaming/playlists/".$dados_stm["porta"].".temp;cp -f /home/streaming/playlists/".$dados_stm["porta"].".temp /home/streaming/playlists/".$dados_stm["porta"].".pls;rm -f /home/streaming/playlists/".$dados_stm["porta"].".end /home/streaming/playlists/".$dados_stm["porta"].".temp; echo OK");

} else {
$ssh->executar("rm -f /home/streaming/playlists/".$dados_stm["porta"].".pls;cp -f /home/streaming/playlists/".$dados_stm["porta"].".temp /home/streaming/playlists/".$dados_stm["porta"].".pls; rm -f /home/streaming/playlists/".$dados_stm["porta"].".temp;echo OK");
}

sleep(3);

$verifica_agendamento_reload = $ssh->executar("tail -n 15 /home/streaming/logs/autodj-".$dados_stm["porta"].".log | grep -c 'Reloading playlist'");

if(str_replace("\n","",$verifica_agendamento_reload) == 0) {

$ssh->executar('echo "'.date("Y/m/d H:i:s").' [robot_agendamento:start] Nova playlist nao detectada, iniciando nova playlist com URI..." >> /home/streaming/logs/autodj-'.$dados_stm["porta"].'.log;(echo '.$dados_stm["porta"].'.pls.reload;echo quit;echo quit) | curl telnet://localhost:'.$dados_stm["porta_telnet"].';echo OK;sleep 1');
}

if($dados_agendamento["inicio"] == 1) {
$ssh->executar('(echo '.$dados_stm["porta"].'.pls.fush_queue;echo quit;echo quit) | curl telnet://localhost:'.$dados_stm["porta_telnet"].';echo "'.date("Y/m/d H:i:s").' [robot_agendamento:fush_queue] Proxima musica na queue apagada" >> /home/streaming/logs/autodj-'.$dados_stm["porta"].'.log;echo OK');

$ssh->executar('(echo pular;echo quit;echo quit) | curl telnet://localhost:'.$dados_stm["porta_telnet"].';echo "'.date("Y/m/d H:i:s").' [robot_agendamento:skip] Musica atual pulada" >> /home/streaming/logs/autodj-'.$dados_stm["porta"].'.log;echo OK');
} else {
$ssh->executar('(echo '.$dados_stm["porta"].'.pls.fush_queue;echo quit;echo quit) | curl telnet://localhost:'.$dados_stm["porta_telnet"].';echo "'.date("Y/m/d H:i:s").' [robot_agendamento:fush_queue] Proxima musica na queue apagada" >> /home/streaming/logs/autodj-'.$dados_stm["porta"].'.log;echo OK');
}

// Atualiza a última playlist tocada
mysqli_query($conexao,"Update streamings set ultima_playlist = '".$dados_playlist["codigo"]."' where codigo = '".$dados_stm["codigo"]."'");

// Loga a ação executada
mysqli_query($conexao,"INSERT INTO playlists_agendamentos_logs (codigo_agendamento,codigo_stm,data,playlist) VALUES ('".$dados_agendamento["codigo"]."','".$dados_stm["codigo"]."',NOW(),'".$dados_playlist["nome"]."')");

} // FIM -> Verifica se esta na hora de iniciar


} else { // Else -> frequencia 3

///////////////////////////////////////////////
/// Frequência 3 -> Executar Dias da Semana ///
///////////////////////////////////////////////

$dia_semana = date("N");
$array_dias = explode(",",rtrim($dados_agendamento["dias"], ','));

// Verifica se esta na hora de iniciar
if(in_array($dia_semana, $array_dias) === true && $hora_inicio == $hora_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"));

echo "[0x03][".$dados_stm["porta"]."][".$dados_agendamento["frequencia"]."][".date_default_timezone_get()."][".$timezone."][".$hora_atual_servidor."][".$hora_inicio."] Iniciando playlist ".$dados_playlist["nome"]." as ".$hora_inicio."\n";

// Mistura as musicas se for o caso
if($dados_agendamento["misturar_musicas"] == "sim") {
$ssh->executar("echo ok;shuf /home/streaming/playlists/".$dados_playlist["arquivo"]." --output=/home/streaming/playlists/".$dados_stm["porta"].".temp");
} else {
$ssh->executar("cp -fv /home/streaming/playlists/".$dados_playlist["arquivo"]." /home/streaming/playlists/".$dados_stm["porta"].".temp");
}

// Configura a playlist que sera executada no final se for o caso
if($dados_agendamento["finalizacao"] == "iniciar_playlist") {

$ssh->executar("cp -v /home/streaming/playlists/".$dados_playlist_finalizacao["arquivo"]." /home/streaming/playlists/".$dados_stm["porta"].".end;cat /home/streaming/playlists/".$dados_stm["porta"].".end >> /home/streaming/playlists/".$dados_stm["porta"].".temp;cp -f /home/streaming/playlists/".$dados_stm["porta"].".temp /home/streaming/playlists/".$dados_stm["porta"].".pls;rm -f /home/streaming/playlists/".$dados_stm["porta"].".end /home/streaming/playlists/".$dados_stm["porta"].".temp; echo OK");

} else {
$ssh->executar("rm -f /home/streaming/playlists/".$dados_stm["porta"].".pls;cp -f /home/streaming/playlists/".$dados_stm["porta"].".temp /home/streaming/playlists/".$dados_stm["porta"].".pls; rm -f /home/streaming/playlists/".$dados_stm["porta"].".temp;echo OK");
}

sleep(3);

$verifica_agendamento_reload = $ssh->executar("tail -n 15 /home/streaming/logs/autodj-".$dados_stm["porta"].".log | grep -c 'Reloading playlist'");

if(str_replace("\n","",$verifica_agendamento_reload) == 0) {

$ssh->executar('echo "'.date("Y/m/d H:i:s").' [robot_agendamento:start] Nova playlist nao detectada, iniciando nova playlist com URI..." >> /home/streaming/logs/autodj-'.$dados_stm["porta"].'.log;(echo '.$dados_stm["porta"].'.pls.reload;echo quit;echo quit) | curl telnet://localhost:'.$dados_stm["porta_telnet"].';echo OK;sleep 1');
}

if($dados_agendamento["inicio"] == 1) {
$ssh->executar('(echo '.$dados_stm["porta"].'.pls.fush_queue;echo quit;echo quit) | curl telnet://localhost:'.$dados_stm["porta_telnet"].';echo "'.date("Y/m/d H:i:s").' [robot_agendamento:fush_queue] Proxima musica na queue apagada" >> /home/streaming/logs/autodj-'.$dados_stm["porta"].'.log;echo OK');

$ssh->executar('(echo pular;echo quit;echo quit) | curl telnet://localhost:'.$dados_stm["porta_telnet"].';echo "'.date("Y/m/d H:i:s").' [robot_agendamento:skip] Musica atual pulada" >> /home/streaming/logs/autodj-'.$dados_stm["porta"].'.log;echo OK');
} else {
$ssh->executar('(echo '.$dados_stm["porta"].'.pls.fush_queue;echo quit;echo quit) | curl telnet://localhost:'.$dados_stm["porta_telnet"].';echo "'.date("Y/m/d H:i:s").' [robot_agendamento:fush_queue] Proxima musica na queue apagada" >> /home/streaming/logs/autodj-'.$dados_stm["porta"].'.log;echo OK');
}

// Atualiza a última playlist tocada
mysqli_query($conexao,"Update streamings set ultima_playlist = '".$dados_playlist["codigo"]."' where codigo = '".$dados_stm["codigo"]."'");

// Loga a ação executada
mysqli_query($conexao,"INSERT INTO playlists_agendamentos_logs (codigo_agendamento,codigo_stm,data,playlist) VALUES ('".$dados_agendamento["codigo"]."','".$dados_stm["codigo"]."',NOW(),'".$dados_playlist["nome"]."')");

} // FIM -> Verifica se o dia da semana é o atual e se esta na hora de iniciar

} // FIM -> frequencia

} // FIM -> Verifica se o servidor esta ON/OFF

} // FIM -> Verifica se o streaming esta ON/OFF

} // FIM -> while

echo "\n[".date("d/m/Y H:i:s")."] Processo Concluído.\n\n";

?>