<?php

if (!function_exists('module')) {
    /**
     * 获取模块实例
     *
     * @param  string|null  $name  模块名称
     * @return \Kylin\Modules\ModuleManager|\Kylin\Modules\Module|null
     */
    function module(?string $name = null): mixed
    {
        $moduleManager = app('modules');

        if ($name) {
            return $moduleManager->get($name);
        }

        return $moduleManager;
    }
}

if (!function_exists('module_path')) {
    /**
     * 获取模块路径
     *
     * @param  string|null  $module  模块名称
     * @param  string|null  $path  子路径
     * @return string
     */
    function module_path(?string $module = null, ?string $path = null): string
    {
        if (!$module) {
            return app('modules')->getPath();
        }

        $moduleInstance = app('modules')->get($module);

        if (!$moduleInstance) {
            return app('modules')->getPath() . '/' . $module . ($path ? '/' . $path : '');
        }

        return $moduleInstance->getPath($path);
    }
}

if (!function_exists('is_module_enabled')) {
    /**
     * 检查模块是否启用
     *
     * @param  string  $module  模块名称
     * @return bool
     */
    function is_module_enabled(string $module): bool
    {
        $moduleInstance = app('modules')->get($module);

        return $moduleInstance ? $moduleInstance->isEnabled() : false;
    }
}

if (!function_exists('is_module_disabled')) {
    /**
     * 检查模块是否禁用
     *
     * @param  string  $module  模块名称
     * @return bool
     */
    function is_module_disabled(string $module): bool
    {
        return !is_module_enabled($module);
    }
}

if (!function_exists('get_modules')) {
    /**
     * 获取所有模块
     *
     * @return \Kylin\Modules\ModuleCollection
     */
    function get_modules(): \Kylin\Modules\ModuleCollection
    {
        return app('modules')->all();
    }
}

if (!function_exists('get_enabled_modules')) {
    /**
     * 获取所有启用的模块
     *
     * @return \Kylin\Modules\ModuleCollection
     */
    function get_enabled_modules(): \Kylin\Modules\ModuleCollection
    {
        return app('modules')->all()->enabled();
    }
}

if (!function_exists('get_disabled_modules')) {
    /**
     * 获取所有禁用的模块
     *
     * @return \Kylin\Modules\ModuleCollection
     */
    function get_disabled_modules(): \Kylin\Modules\ModuleCollection
    {
        return app('modules')->all()->disabled();
    }
}

