<?php

namespace Kylin\Modules\Console\Commands;

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

/**
 * 列出所有模块命令
 *
 * 用于显示所有已注册模块的信息
 */
class ModuleListCommand extends Command
{
    /**
     * 命令名称和签名
     *
     * @var string
     * 
     * 命令说明：
     * - 用途：列出所有模块，显示模块的名称、状态、版本等信息
     * - 示例：php artisan module:list
     */
    protected $signature = 'module:list';

    /**
     * 命令描述
     *
     * @var string
     */
    protected $description = '列出所有模块';

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

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

        if ($modules->isEmpty()) {
            $this->info('未找到模块。');
            return 0;
        }

        $headers = ['序号', '模块名称', '状态', '排序', '路径'];
        $rows = [];

        foreach ($modules as $index => $module) {
            $rows[] = [
                $index + 1,
                $module->getName(),
                $module->isEnabled() ? '已启用' : '已禁用',
                0, // 排序顺序
                str_replace(base_path(), '', $module->getPath()),
            ];
        }

        $this->table($headers, $rows);

        $this->info(sprintf(
            '总计：%d 个模块\n已启用：%d 个模块\n已禁用：%d 个模块',
            $modules->count(),
            $modules->enabled()->count(),
            $modules->disabled()->count()
        ));

        return 0;
    }
}