<?php

namespace Kylin\Activity;

use Illuminate\Support\ServiceProvider;
use Kylin\Activity\CleanActivitylogCommand;
use Kylin\Activity\Commands\AuditRedactionCommand;
use Kylin\Activity\Middleware\LogViewerAuditMiddleware;

/**
 * 活动日志服务提供者
 *
 * 注册活动日志记录服务，支持：
 *  - 模型操作日志（创建/更新/删除）
 *  - 用户行为日志（登录/操作/导出）
 *  - 日志批次管理（同一请求的日志归入同一批次）
 *  - 日志清理命令（删除超过指定天数的记录）
 *
 * 使用方式：
 *  activity()->performedOn($model)->causedBy($user)->log('描述');
 */
class ActivityServiceProvider extends ServiceProvider
{
    /**
     * 注册服务
     *
     * 合并配置并绑定 ActivityLogger 到容器。
     */
    public function register(): void
    {
        $this->mergeConfigFrom(__DIR__ . '/../config/kylin-activity.php', 'kylin-activity');

        $this->app->bind('kylin-activity', ActivityLogger::class);
    }

    /**
     * 启动服务
     *
     * 加载数据库迁移、发布配置文件、注册清理命令。
     */
    public function boot(): void
    {
        $this->loadMigrationsFrom(__DIR__ . '/../database/migrations');

        $this->publishes([
            __DIR__ . '/../config/kylin-activity.php' => config_path('kylin-activity.php'),
        ], 'kylin-activity-config');

        if ($this->app->runningInConsole()) {
            $this->commands([
                CleanActivitylogCommand::class,       // 清理过期活动日志
                AuditRedactionCommand::class,         // 审计脱敏质量
            ]);
        }

        // 注册日志查看审计中间件
        $this->app['router']->aliasMiddleware('activity-log-viewer', LogViewerAuditMiddleware::class);
    }
}
