<?php

namespace Kylin\Auth\Commands;

use Illuminate\Console\Command;
use Kylin\Rbac\Models\Role;
use Kylin\User\Models\User;
use Kylin\User\Models\UserProfile;
use Illuminate\Support\Facades\Hash;

/**
 * 创建超级管理员命令
 *
 * Artisan 命令：php artisan kylin:create-super-admin
 * 创建一个拥有所有权限的超级管理员账号。
 */
class CreateSuperAdminCommand extends Command
{
    protected $signature = 'kylin:create-super-admin
                            {--email= : 管理员邮箱}
                            {--password= : 管理员密码}
                            {--name= : 管理员用户名}';

    protected $description = '创建超级管理员账号';

    public function handle(): int
    {
        $email = $this->option('email') ?? 'earl.k.wang@wangk.cn';
        $password = $this->option('password') ?? 'Kylin@20200921';
        $name = $this->option('name') ?? '王康';

        // 检查是否已存在
        $existing = User::where('email', $email)->first();
        if ($existing) {
            // 已存在则确保分配 super-admin 角色
            $existing->assignRole('super-admin');
            $this->components->info("管理员账号已存在，已确保分配 super-admin 角色: {$email}");
            return self::SUCCESS;
        }

        // 确保 RBAC 角色已安装
        $superAdminRole = Role::firstOrCreate(
            ['name' => 'super-admin', 'guard_name' => 'web'],
            ['display_name' => '超级管理员', 'description' => '拥有所有权限'],
        );

        // 创建用户
        $user = User::create([
            'name' => $name,
            'email' => $email,
            'password' => Hash::make($password),
            'status' => 1,
            'password_changed_at' => now(),
        ]);

        // 创建用户档案
        UserProfile::create(['user_id' => $user->id]);

        // 分配超级管理员角色
        $user->assignRole($superAdminRole);

        $this->components->info('超级管理员账号创建成功！');
        $this->components->twoColumnDetail('邮箱', $email);
        $this->components->twoColumnDetail('用户名', $name);

        return self::SUCCESS;
    }
}
