<?php
    class CommonTools
    {
        public static function getDummyFuzzyKeyword($keyword) {
            $input = empty($keyword) ? '' : strtolower($keyword);
            $input = str_replace(" ", "", $input);
            $chars = str_split($input);
            $fuzzyKeyword = '%';

            foreach ($chars as $char) {
                if(mb_check_encoding($char, 'UTF-8'))
                    $fuzzyKeyword = $fuzzyKeyword . $char . '%';
            }

            return $fuzzyKeyword;
        }

        public static function arrayMultiSort()
        {
            $args = func_get_args();
            $data = array_shift($args);
            foreach ($args as $n => $field) {
                if(is_string($field)) {
                    $tmp = array();
                    foreach ($data as $key => $row) {
                        $tmp[$key] = $row[$field];
                    }

                    $args[$n] = $tmp;
                }
            }

            $args[] = &$data;
            call_user_func_array('array_multisort', $args);
            return array_pop($args);
        }

        public static function numberToRomanRepresentation($number) {
            $map = 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);
            $returnValue = '';
            while ($number > 0) {
                foreach ($map as $roman => $int) {
                    if($number >= $int) {
                        $number -= $int;
                        $returnValue .= $roman;
                        break;
                    }
                }
            }
            return $returnValue;
        }

        public static function safeString($string) {
            return preg_replace("/[^[:alnum:][:space:]]/u", '', $string);
        }

        public static function safeToPrintString($string) {
            return self::safeString(strip_tags($string));
        }

        public static function removeAccents($string) {
            $accents = [
                'á' => 'a', 'à' => 'a', 'â' => 'a', 'ä' => 'a', 'ã' => 'a', 'å' => 'a',
                'ç' => 'c',
                'é' => 'e', 'è' => 'e', 'ê' => 'e', 'ë' => 'e',
                'í' => 'i', 'ì' => 'i', 'î' => 'i', 'ï' => 'i',
                'ñ' => 'n',
                'ó' => 'o', 'ò' => 'o', 'ô' => 'o', 'ö' => 'o', 'õ' => 'o',
                'ú' => 'u', 'ù' => 'u', 'û' => 'u', 'ü' => 'u',
                'ý' => 'y', 'ÿ' => 'y',
            ];

            return strtr($string, $accents);
        }

        public static function slug($string) {
            // Convert to lowercase
            $slug = strtolower($string);

            // Remove accents
            $slug = self::removeAccents($slug);

            // Replace non-alphanumeric characters with a space
            $slug = preg_replace('/[^a-z0-9\s-]/', ' ', $slug);

            // Replace spaces and multiple hyphens with a single hyphen
            $slug = preg_replace('/[\s-]+/', '-', $slug);

            // Trim hyphens from the beginning and end
            $slug = trim($slug, '-');

            return $slug;
        }
    }
?>
