<?php

namespace Kylin\Media;

use Illuminate\Support\ServiceProvider;
use Kylin\Media\MediaCollections\Commands\CleanCommand;
use Kylin\Media\MediaCollections\Commands\ClearCommand;
use Kylin\Media\Conversions\Commands\RegenerateCommand;

/**
 * 媒体库服务提供者
 *
 * 提供文件上传、媒体管理、图片转换、响应式图片等完整媒体库功能。
 * 基于 Spatie MediaLibrary 架构设计，支持：
 *  - 多文件上传与关联（FileAdder）
 *  - 图片格式转换（WebP、Avif 等）
 *  - 响应式图片生成（多尺寸缩略图）
 *  - 文件命名与路径生成策略
 *  - 文件删除与清理
 *  - Artisan 命令：clean（清理孤儿文件）、clear（清空集合）、regenerate（重新生成转换）
 */
class MediaServiceProvider extends ServiceProvider
{
    /**
     * 注册服务
     *
     * 合并配置文件并绑定媒体仓库实例。
     */
    public function register(): void
    {
        $this->mergeConfigFrom(__DIR__ . '/../config/kylin-media.php', 'kylin-media');

        $this->app->bind('kylin-media', fn () => new MediaRepository);
    }

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

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

        if ($this->app->runningInConsole()) {
            $this->commands([
                CleanCommand::class,       // 清理未关联的媒体文件
                ClearCommand::class,       // 清空集合中的所有媒体
                RegenerateCommand::class,  // 重新生成图片转换
            ]);
        }
    }
}
