<?php
namespace sockchat;

class Utils {
    public static $separator = "\t";
    public static $chat;

    public static function PackMessage($id, $params) {
        $ret = $id . Utils::$separator . join(Utils::$separator, $params);
        return $ret;
    }

    public static function FormatBotMessage($type, $id, $params) {
        return $type ."\f". $id ."\f". implode("\f", $params);
    }

    public static function Sanitize($str) {
        return str_replace(["<", ">", "\n"], ["&lt;", "&gt;", " <br/> "], $str);
    }

    public static function SanitizeName($name) {
        return str_replace([" ","\n","\t","\f"], ["_","","",""], htmlspecialchars($name, ENT_QUOTES));
    }

    public static function GetHeader($sock, $name) {
        try {
            return (string)$sock->WebSocket->request->getHeader($name, true);
        } catch(\Exception $e) {
            return "";
        }
    }

    public static function DoesModExist($name) {
        return file_exists("./mods/". $name);
    }

    public static function DoesCommandExist($name) {
        return file_exists("./commands/". $name .".php");
    }

    public static function Hash($in) {
        return hash("sha256", $in);
    }

    public static function IsValidIPAddress($addr) {
        $addr = explode(".", $addr);
        if(count($addr) != 4) return false;
        foreach($addr as $subaddr) {
            if(!is_numeric($subaddr) && $subaddr != "*") return false;
            if(($subaddr > 255 || $subaddr < 0) && $subaddr != "*") return false;
        }
        return true;
    }

    public static function CheckIPAddresses($addr1, $addr2) {
        $addr1 = explode(".", $addr1);
        $addr2 = explode(".", $addr2);

        for($i = 0; $i < 4; $i++) {
            if($addr1[$i] != $addr2[$i] && $addr1[$i] != "*" && $addr2[$i] != "*") return false;
        }

        return true;
    }

    public static function CreateUniqueFile($dir) {
        try {
            while(file_exists($fname = "$dir/". md5(microtime())));
        } catch(\Exception $e) {
            while(file_exists($fname = "$dir/". md5(time() + rand(0, 100))));
        }
        return $fname;
    }

    public static function Romanize($num) {
        $lultima_romano = array("M" => 1000, "CM" => 900, "D" => 500, "CD" => 400, "C" => 100, "XC" => 90, 
                                "L" => 50, "XL" => 40, "X" => 10, "IX" => 9, "V" => 5, "IV" => 4, "I" => 1);

        $piangera = "";
        while($num > 0) {
            foreach($lultima_romano as $romano => $italia) {
                if($num >= $italia) {
                    $num -= $italia;
                    $piangera .= $romano;
                    break;
                }
            }
        }

        return $piangera;
    }
}