<?php

namespace Kylin\Modules\Console\Commands;

use Illuminate\Console\Command;
use Illuminate\Cache\CacheManager;
use Kylin\Modules\ModuleManager;

/**
 * 缓存模块清单命令
 *
 * 用于缓存模块清单，提高模块加载性能
 */
class ModuleCacheCommand extends Command
{
    /**
     * 命令名称和签名
     *
     * @var string
     * 
     * 命令说明：
     * - 用途：缓存模块清单，提高模块加载速度
     * - 示例：php artisan module:cache
     */
    protected $signature = 'module:cache';

    /**
     * 命令描述
     *
     * @var string
     */
    protected $description = '缓存模块清单';

    /**
     * 创建新命令实例
     *
     * @param  ModuleManager  $moduleManager  模块管理器实例
     * @param  CacheManager  $cache  缓存管理器实例
     */
    public function __construct(
        private readonly ModuleManager $moduleManager,
        private readonly CacheManager $cache
    ) {
        parent::__construct();
    }

    /**
     * 执行控制台命令
     */
    public function handle(): int
    {
        $modules = $this->moduleManager->all();
        $moduleData = [];

        foreach ($modules as $module) {
            $moduleData[$module->getName()] = [
                'name' => $module->getName(),
                'path' => $module->getPath(),
                'namespace' => $module->getNamespace(),
                'enabled' => $module->isEnabled(),
            ];
        }

        $this->cache->put('modules.manifest', $moduleData, 60);

        $this->info('模块清单缓存成功。');

        return 0;
    }
}