<?php

namespace Kylin\Notification;

use Illuminate\Support\ServiceProvider;
use Kylin\Notification\Services\NotificationService;

/**
 * 通知服务提供者
 *
 * 注册多渠道通知服务，支持：
 *  - 邮件通知（MailChannel）
 *  - 短信通知（阿里云短信、腾讯云短信）
 *  - 推送通知（APNs-iOS、FCM-Android、个推、极光推送、友盟推送）
 *  - 微信模板消息（WechatTemplateChannel）
 *  - 站内信/数据库通知（DatabaseChannel）
 *
 * 所有通知渠道通过 ChannelInterface 统一接口接入，
 * 支持按渠道配置模板、异步发送、发送日志记录。
 */
class NotificationServiceProvider extends ServiceProvider
{
    /**
     * 注册服务
     *
     * 合并配置文件并注册通知服务单例。
     */
    public function register(): void
    {
        $this->mergeConfigFrom(__DIR__ . '/../config/kylin-notification.php', 'kylin-notification');

        $this->app->singleton(NotificationService::class);
        $this->app->singleton('kylin-notification', NotificationService::class);
    }

    /**
     * 启动服务
     *
     * 加载数据库迁移、API 路由、发布配置文件。
     */
    public function boot(): void
    {
        $this->loadMigrationsFrom(__DIR__ . '/../database/migrations');
        $this->loadRoutesFrom(__DIR__ . '/../routes/api.php');

        if ($this->app->runningInConsole()) {
            $this->publishes([
                __DIR__ . '/../config/kylin-notification.php' => config_path('kylin-notification.php'),
            ], 'kylin-notification-config');
        }
    }
}
