<?php

namespace App\Helpers;

class MiscHelper
{
    public static function convertToBytes($val)
    {
        if(empty($val))return 0;

        $val = trim($val);

        preg_match('#([0-9]+)[\s]*([a-z]+)#i', $val, $matches);

        $last = '';
        if(isset($matches[2])){
            $last = $matches[2];
        }

        if(isset($matches[1])){
            $val = (int) $matches[1];
        }

        switch (strtolower($last))
        {
            case 'g':
            case 'gb':
                $val *= 1024;
            case 'm':
            case 'mb':
                $val *= 1024;
            case 'k':
            case 'kb':
                $val *= 1024;
        }

        return (int) $val;
    }

    public static function getEnvironmentFilePath()
    {
        return sprintf('%s/.env', dirname(dirname(__DIR__)));
    }

    public static function getEnvironmentSetting($settingName)
    {
        $envFile = MiscHelper::getEnvironmentFilePath();
        $matches = null;
        if (preg_match(sprintf('/^\s*%s\s*=\s*(.+)$/im', preg_quote($settingName)), file_get_contents($envFile), $matches))
        {
            return trim($matches[1]);
        }

        return null;
    }

    /**
     * Tests whether the provided URL belongs to the current application (i.e. both scheme and hostname match.)
     * @param $url
     * @return bool
     */
    public static function isSafeUrl($url)
    {
        $parts = parse_url($url);
        $validParts = parse_url(url('/'));

        return ($parts['scheme'] == $validParts['scheme'] && $parts['host'] == $validParts['host']);
    }

    public static function randomString($length = 10)
    {
        $seed = 'abcdefghijklmnopqrstuvwxyz01234567890';
        $string = '';

        while (strlen($string) < $length)
        {
            $string .= substr($seed, rand(0, strlen($seed) - 1), 1);
        }

        return $string;
    }

    public static function setEnvironmentSetting($settingName, $value)
    {
        if (is_null(MiscHelper::getEnvironmentSetting($settingName)))
        {
            return file_put_contents(MiscHelper::getEnvironmentFilePath(), sprintf('%s=%s', $settingName, $value) . PHP_EOL, FILE_APPEND);
        }

        return false;
    }
}