<?php

namespace Kylin\Auth;

use Illuminate\Support\ServiceProvider;
use Kylin\Auth\Commands\CreateSuperAdminCommand;
use Kylin\Auth\Services\AuthService;

/**
 * 认证服务提供者
 *
 * 注册用户认证服务，支持：
 *  - 多字段登录（邮箱/手机/用户名）
 *  - 登录频率限制（防暴力破解）
 *  - 验证码校验
 *  - 密码过期检查
 *  - Token 管理（Sanctum）
 *  - 创建超级管理员命令
 */
class AuthServiceProvider extends ServiceProvider
{
    /**
     * 注册服务
     *
     * 合并配置并注册 AuthService 单例。
     */
    public function register(): void
    {
        $this->mergeConfigFrom(
            __DIR__ . '/../config/kylin-auth.php', 'kylin-auth'
        );

        $this->app->singleton(AuthService::class);
        $this->app->singleton('kylin-auth', AuthService::class);
    }

    /**
     * 启动服务
     *
     * 发布配置文件、加载 API 路由、注册控制台命令。
     */
    public function boot(): void
    {
        $this->publishes([
            __DIR__ . '/../config/kylin-auth.php' => config_path('kylin-auth.php'),
        ], 'kylin-auth-config');

        $this->loadRoutesFrom(__DIR__ . '/../routes/api.php');

        if ($this->app->runningInConsole()) {
            $this->commands([
                CreateSuperAdminCommand::class,  // 创建超级管理员账号
            ]);
        }
    }
}
