<?php

namespace Kylin\Excel;

use Illuminate\Support\ServiceProvider;
use Kylin\Excel\Services\ExcelService;

/**
 * Excel服务提供者
 * 
 * 负责注册和配置Excel服务到Laravel容器中
 * 包括配置合并、服务绑定和服务发布等功能
 */
class ExcelServiceProvider extends ServiceProvider
{
    /**
     * 注册服务
     * 
     * 在容器中绑定Excel服务，使其可被依赖注入使用
     * 同时合并默认配置文件到应用配置中
     * 
     * @return void
     */
    public function register(): void
    {
        $this->mergeConfigFrom(
            __DIR__ . '/../config/excel.php',
            'excel'
        );

        $this->app->singleton(ExcelService::class, function ($app) {
            return new ExcelService($app['config']->get('excel', []));
        });

        $this->app->alias(ExcelService::class, 'excel');
    }

    /**
     * 启动服务
     * 
     * 发布配置文件到应用配置目录，使开发者可以自定义配置
     * 仅在控制台模式下执行（如php artisan vendor:publish）
     * 
     * @return void
     */
    public function boot(): void
    {
        if ($this->app->runningInConsole()) {
            $this->publishes([
                __DIR__ . '/../config/excel.php' => config_path('excel.php'),
            ], 'excel-config');
        }
    }
}
