<?php

$nome_fonte = $argv[0];
$url = $argv[1];
$unique = $argv[2];
createLocalImage($url, $unique);
function createLocalImage($url, $unique)
{
    $extension = ".png";
    $filename = $unique . $extension;
    $path = "images/";
    $img = @imagecreatefrompng($url);
    imagepng($img, $path . $filename);
    chown($path . $filename, "apache");
}
/**
 * inicio
 *
 * Processa toda a logica e loops em cima das categorias, subcagegorias (quando tiver), graficos, chaves, chaves dinamicas (quando tive)
 * analisa se o grafico plotara apenas uma chave e 3 medias ou varias chaves e apenas suas medias.
 *
 * @param (type) (id) identificador do e-mail.
 */
function createHost($codhost)
{
    $host = new stdClass();
    $dadosEmpresa = buscaEmpresa($codhost);
    $host->codhost = $codhost;
    $host->nomeEmpresa = $dadosEmpresa["empresa_nome"];
    $host->nome = $dadosEmpresa["host_nome"];
    $host->headerPrincipal = 'RESUMO DE PERFORMANCE DO SERVIDOR - ' . $dadosEmpresa["host_nome"];
    $host->responsavel = $dadosEmpresa["responsavel_nome"];
    $host->emailResponsavel = $dadosEmpresa["responsavel_email"];
    $host->CopiasControladas = getCopiasControladas($codhost);
    $host->ArrayJson = [];
    $host->ArrayEventos = [];
    $host->categoria = [];
    $host->subcategoria = [];
    $host->images = [];
    $host->numMaxPeriodAnalise = getMaxPeriodAnalise();
    $host->numMaxObjetosGrafico = getMaxObjetosGrafico();
    $host->numeroMesesEventos = numMaxPeriodoEvento();
    /**
     * Categorias
     *
     * Processa pelas categorias, cada categoria tem uma ordem de execucao
     */
    $ArrayCategorias = buscaCategorias($codhost);
    foreach ($ArrayCategorias as $categoria) {
        debug("<hr>");
        debugl("[Categoria]" . $categoria["nome"]);
        /**
         * SubCategoria/Instancia
         *
         * Verifica quais chaves possuem dois espacos em branco ou o caracter de percentual (%),
         * Caso retorne alguma chave o objeto pode ter uma subcagegoria/instancia.
         */
        $ArrayPossiveisInstancias = buscaPossiveisInstancias($codhost, $categoria["categoria_id"], $host->numMaxPeriodAnalise);
        if (is_null($ArrayPossiveisInstancias)) {
            $ArrayPossiveisInstancias[]["subcategoria"] = null;
        }
        /**
         * SubCategorias/Instancias
         *
         * Processa cada subcategoria/instancia
         */
        debugl("Instancias: " . count($ArrayPossiveisInstancias));
        foreach ($ArrayPossiveisInstancias as $instancia) {
            $nome_instancia = $instancia["subcategoria"];
            debugl("[SubCategoria]" . $instancia["subcategoria"]);
            /**
             * Graficos da Categoria/subcategoria
             *
             * Busca os graficos
             */
            $ArrayGraficos = buscaGraficos($codhost, $categoria["categoria_id"]);
            /**
             * Graficos da Categoria/subcategoria
             *
             * Processa cada grafico
             */
            foreach ($ArrayGraficos as $grafico) {
                debug("<hr>");
                /**
                 * Altera o json com o nome do titulo e subtitulo do grafico
                 */
                $json = $grafico["json"];
                /**
                 * Busca as chaves cadastradas neste grafico
                 */
                $ArrayChavesCadastradas = buscaChavesCadastradas($codhost, $grafico["grafico_id"]);
                foreach ($ArrayChavesCadastradas as $chave) {
                    debugl("[ChaveBusca]" . $chave["valor"]);
                }
                /**
                 * Busca apenas as maiores chaves nao apenas 5, dependendo do parametro.
                 * Nome da instancia pra filtrar apenas as chaves que possuem o nome da instancia tambem (se existir instancia)
                 */
                $ArrayCincoMaioresChaves = buscaCincoMaioresChaves($codhost, $nome_instancia, $ArrayChavesCadastradas, $host->numMaxObjetosGrafico, $host->numMaxPeriodAnalise);
                $QtdEventos = buscaQtdEventos($codhost, $ArrayChavesCadastradas, $host->numMaxPeriodAnalise);
                /**
                 * Dependendo do total de chaves retornadas, o grafico tera varias chaves ou apenas uma que entao mostrara min,med,max
                 */
                $total = count($ArrayCincoMaioresChaves);
                $series = array();
                $categories = array();
                /**
                 * Processa cada chave encontrada
                 */
                $alterou_titulo = false;
                foreach ($ArrayCincoMaioresChaves as $chaveMaior) {
                    debugl("[ChaveRetorno]" . $chaveMaior["Chave"]);
                    //retorna a legenda da primeira chave que encontrar baseada em uma das chaves com maior valor
                    //echo "Teste de legenda...para " . $chaveMaior["Chave"];
                    $legenda = null;
                    $legendaChave = null;
                    $legenda = buscaLegendaChaveCadastrada($ArrayChavesCadastradas, $chaveMaior["Chave"]);
                    $legendaChave = buscaRegexObjetoNovoRegex2($chaveMaior["Chave"], $legenda);
                    if (is_null($legendaChave)) {
                        $legendaChave = $chaveMaior["Chave"];
                    }
                    if ($alterou_titulo === false) {
                        $titulo_grafico = $grafico["titulo"];
                        $subtitulo_grafico = $grafico["subtitulo"];
                        $titulo_grafico = buscaRegexObjetoNovoRegex2($chaveMaior["Chave"], $grafico["titulo"]);
                        $subtitulo_grafico = buscaRegexObjetoNovoRegex2($chaveMaior["Chave"], $grafico["subtitulo"]);
                        $json = str_replace('$titulo_grafico', $titulo_grafico, $json);
                        $json = str_replace('$subtitulo_grafico', $subtitulo_grafico, $json);
                        $alterou_titulo = true;
                    }
                    /**
                     * Para cada chave busca seus valores, medias e datas por mes.
                     */
                    $ArrayValoresChave = buscaValoresPorChave($codhost, $chaveMaior["Chave"], $host->numMaxPeriodAnalise);
                    /**
                     * Ponto onde decide se a legenda sera min,med,max ou o nome de cada legendaChave plotado
                     */
                    if ($total > 1) {
                        debugl("[TipoPlotagem]" . "print apenas as medias");
                        array_push($series, processaValoresMultiplos($legendaChave, $ArrayValoresChave));
                        /**
                         * apresentar novo nome para o objeto
                         **/
                        //debugl(json_encode($series, JSON_NUMERIC_CHECK));
                    } else {
                        debugl("[TipoPlotagem]" . "print min/med/max");
                        $series = processaMedias($ArrayValoresChave);
                        //debugl(json_encode($series, JSON_NUMERIC_CHECK));
                    }
                    /**
                     * Abrevia o array de datas de 01 para Jan por exemplo
                     */
                    $categories = processaDatas($ArrayValoresChave, $host->numMaxPeriodAnalise);
                }
                /**
                 * Faz um replace em $categorias colocando as data abreviadas no json
                 */
                debugl("Json limpo: " . $json);
                $json = str_replace('"$categorias"', json_encode($categories, JSON_NUMERIC_CHECK), $json);
                debugl("Json \$categorias: " . $json);
                /**
                 * Faz um replace em $series colocando os nomes e valores de cada serie a ser plotada
                 */
                $json = str_replace('"$series"', json_encode($series, JSON_NUMERIC_CHECK), $json);
                debugl("Json \$series: " . $json);
                //debugl("? eventos ? ".$QtdEventos);
                //criando imagens locais (bug gmail)
                $url_encoded = createWebServiceURL($json);
                debugl("\$url_encoded: {$url_encoded}");
                $imagem = createLocalImage($url_encoded);
                /* imagem em base64
                			*
                			$imagem = createBase64Image($url_encoded);
                			*
                			*/
                /**
                 * Armazena tudo em um unico objeto
                 */
                array_push($host->categoria, $categoria["nome"]);
                array_push($host->subcategoria, $instancia["subcategoria"]);
                array_push($host->ArrayJson, $json);
                array_push($host->images, $imagem);
                array_push($host->ArrayEventos, $QtdEventos);
            }
        }
    }
    return $host;
}