<?php

namespace Kylin\Modules\Console\Commands;

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

/**
 * 启用模块命令
 *
 * 用于启用指定的模块
 */
class ModuleEnableCommand extends Command
{
    /**
     * 命令名称和签名
     *
     * @var string
     * 
     * 命令参数说明：
     * 1. {name} - 模块名称（必填）
     *    - 数据类型：字符串
     *    - 用途：指定要启用的模块名称
     *    - 示例：php artisan module:enable game
     */
    protected $signature = 'module:enable {name : 模块名称}';

    /**
     * 命令描述
     *
     * @var string
     */
    protected $description = '启用模块';

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

    /**
     * 执行控制台命令
     */
    public function handle(): int
    {
        $name = (string) $this->argument('name');

        $module = $this->moduleManager->get($name);

        if (!$module) {
            $this->error("模块 [{$name}] 未找到。");
            return 1;
        }

        if ($module->isEnabled()) {
            $this->info("模块 [{$name}] 已经是启用状态。");
            return 0;
        }

        $module->enable();

        $this->info("模块 [{$name}] 启用成功。");

        return 0;
    }
}