#!/opt/hp/hpsmh/sbin/php -qc

<?php

function smhlogreader_load_messages($lang)
{
    // Set logMessages  and severityLevel as global.
    global $logMessages;
    global $severityLevel;
    
    if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
        $fileToInclude = getenv("SystemDrive") .  "\\hp\\hpsmh\\data\\htdocs\lang\\" . $lang . "\\log_messages.php";
    } else if (strtoupper(substr(PHP_OS, 0, 3)) === 'LIN') {
        $fileToInclude = "/opt/hp/hpsmh/data/htdocs/lang/" . $lang . "/log_messages.php";
    }

    if (file_exists($fileToInclude)) {
        include_once($fileToInclude);
    } else {
        return 0;
    }
    
    return 1;
}

function smhlogreader_show_help()
{
    print "Usage: " . $_SERVER['argv'][0] . " <option>\n";
    print " --help, -h, or -?            to get this help.\n";
    print " --version                    to return the version of SMH.\n";
    print " --file, -f                   to set log file.\n";
    print " --from                       to set 'from' value (range).\n";
    print " --to                         to set 'to' value (range).\n";
    print " --lang, -l                   to set language.\n";
}

function smhlogreader_process_file($from, $to, $lang, $logFile)
{
    global $logMessages;
    global $severityLevel;
    $lines = array();

    $logentries = count(@file($logFile));

    if ($logentries < $from) {
        echo "smhlogreader: no logs available in this range.\n";
        printf("total log entries: %d\n", $logentries);
        return 1;
    }

    if ($to > $logentries) {
        printf("total log entries: %d\n", $logentries);
    	$to = $logentries;
    }
    
    $logFP = @fopen($logFile, "r");
    if ($from && $to) {
        $currentLine = $logentries+0;
        
    	while(!feof($logFP) && $currentLine >= $from) {
            $line = fgets($logFP);            
            
            if($currentLine <= $to)
                array_push($lines, $line);
                
            $currentLine--;
        }
    }
    fclose($logFP);

    $lines = array_reverse($lines);

    foreach ($lines as $line) {
        $line = strip_tags($line);
        $lineArray = explode(" ", trim($line));

        if(count($lineArray) >= 3) {
            $severity = $lineArray[0];
            error_reporting(E_ERROR | E_PARSE); 
            setlocale(LC_TIME, $localeName);
            $date = strftime("%c", $lineArray[1]);
            error_reporting(E_ERROR | E_WARNING | E_PARSE);
            $message = $logMessages[$lineArray[2]];
            $args = array_slice($lineArray, 3);
            printf("%s  %s\n", $severityLevel[$severity], $date);
            $requiredArgs = substr_count($message, "%");
            $argCount = count($args);

            for($i = 0; $i < $requiredArgs - $argCount; $i++) {
                array_push($args, "(null)");
            }

            vprintf($message, $args);
            print "\n\n";
        }
    }
}

function smhlogreader_main()
{
    // Default Log File
    if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
        $logFile = getenv("SystemDrive") .  "\\hp\\hpsmh\\logs\\smh_enc.log";
    } else if (strtoupper(substr(PHP_OS, 0, 3)) === 'LIN') {
        $logFile = "/opt/hp/hpsmh/logs/smh_enc.log";
    }
    // Default Language
    $lang = "en";

    $showHelp = 0; $showVersion = 0;
    $from = 1; $to = 10;
    $stopOnError = 0;
    
    $smhVersion = "7.3.3.1";
    
    // Processa o argc/argv
    for ($i = 1; $i < $_SERVER["argc"]; $i++) {
        switch($_SERVER["argv"][$i]) {
            // Print SMH Version
            case "-v":
            case "--version":
                $showVersion = 1;
                break;

            case "--help":
            case "-h":
            case "-?":
                $showHelp = 1;
                break;

            // Set FROM option
            case "--from":
                if (is_numeric($_SERVER['argv'][$i+1])) {
                    $from =  $_SERVER['argv'][++$i];
                } else {
                    $stopOnError = 1;
                    echo "smhlogreader: invalid value.\n";
                }
                break;                

            // Set TO option
            case "--to":
                if (is_numeric($_SERVER['argv'][$i+1])) {
                    $to =  $_SERVER['argv'][++$i];
                } else {
                    $stopOnError = 1;
                    echo "smhlogreader: invalid value.\n";
                }
                break;

            // Set Language option
            case "-l":
            case "--lang":
                $lang =  $_SERVER['argv'][++$i];
                break;

            // Set Log File option
            case "-f":
            case "--file":
                if (file_exists($_SERVER['argv'][$i+1])) {
                    $logFile = $_SERVER['argv'][++$i];
                } else {
                    echo "smhlogreader: log file not found!\n";
                    $logFile = "";
                }
                break;
            
            default:
                $stopOnError = 1;
                echo "smhlogreader: invalid option.\n";
                smhlogreader_show_help();
                break;
        }
	
		if ($stopOnError)
      		return 1;
        
    }

    if (!smhlogreader_load_messages($lang)) {
        echo "smhlogreader: not able to load language pack.\n";
        return 1;
    }
    
    if ($showVersion) {
        printf("smhlogreader: version %s\n", $smhVersion);
        return 0;
    }
     
    if ($showHelp) {
        smhlogreader_show_help();
        return 0;
    }
        
    if ($to < $from || $from <= 0) {
        echo "smhlogreader: invalid range.\n";
        return 1;
    }
    
    if (file_exists($logFile)) {
        smhlogreader_process_file($from, $to, $lang, $logFile);
    }
}

return smhlogreader_main();

?>
