<?PHP
/**
 * Provides type-safe overrides of default PHP functions.
 */
declare(strict_types = 1);

/**
 * Standard class providing overrides of default PHP functions as static
 * functions.
 */
class MD_STD {

    /**
     * Wrapper around file_get_contents, that provides catches errors on it and returns
     * with type safety.
     *
     * @param string $filename Filepath of the file to read.
     *
     * @return string
     */
    public static function file_get_contents(string $filename):string {

        if (substr($filename, 0, 4) !== 'http' && !file_exists($filename)) {
            throw new MDFileDoesNotExist("There is no file {$filename}");
        }

        $contents = file_get_contents($filename);

        if (is_bool($contents)) {
            throw new MDFileIsNotReadable("File {$filename} is not readable");
        }

        return $contents;

    }

    /**
     * Gets contents of a folder.
     *
     * @param string $filepath Directory path.
     *
     * @return array<string>
     */
    public static function scandir(string $filepath):array {

        if (!is_dir($filepath) || ($output = scandir($filepath)) === false) {
            throw new MDFileDoesNotExist("There is no file {$filename}");
        }

        return array_values(array_diff($output, ['.', '..']));

    }

}