<?php

declare(strict_types=1);

namespace Kylin\Fitness;

use Illuminate\Contracts\Http\Kernel;
use Illuminate\Support\ServiceProvider;

/**
 * 健身管理系统服务提供者
 *
 * 提供健身房管理功能，包括会员管理、课程预约、
 * 私教排课、入场签到、体测数据管理等。
 *
 * 依据《体育法》第八十九条、第九十条：
 * 健身服务经营者需按约定提供服务，教练需持证上岗。
 *
 * 依据《个人信息保护法》第二十八条：
 * 体测数据属于敏感个人信息，需加密存储。
 */
class FitnessServiceProvider extends ServiceProvider
{
    public function register(): void
    {
        // 合并配置
        $this->mergeConfigFrom(
            __DIR__ . '/../config/fitness.php',
            'fitness'
        );
    }

    public function boot(): void
    {
        // 注册设备 API Key 中间件别名
        $this->app->booted(function () {
            $router = $this->app->make('router');
            $router->aliasMiddleware('api.key', \Kylin\Fitness\Http\Middleware\ApiKeyMiddleware::class);
        });

        // 发布配置
        if ($this->app->runningInConsole()) {
            $this->publishes([
                __DIR__ . '/../config/fitness.php' => config_path('fitness.php'),
            ], 'kylin-fitness-config');

            $this->commands([
                Commands\FitnessInstallCommand::class,
            ]);
        }

        // 加载路由
        $this->loadRoutesFrom(__DIR__ . '/../routes/api.php');

        // 加载迁移
        $this->loadMigrationsFrom(__DIR__ . '/../database/migrations');
    }
}