/**
 * @作者: david.yan(david.yan@qq.com)
 * @日期: 2021-11-26 15:25:03
 * @描述: Sender微服务主入口程序，提供邮件和短信发送功能
 */
package main

import (
	"bsm/full/module/base/sender/internal/config"
	"bsm/full/module/base/sender/internal/impl"
	"bsm/full/module/base/sender/internal/server"
	"git.apinb.com/bsm-sdk/core/service"
)

var (
	// ServiceKey 服务标识符，用于配置文件加载和服务注册
	ServiceKey = "sender"
)

// main 主函数，启动Sender微服务
func Run() {
	// 初始化配置文件
	config.New(ServiceKey)

	// 初始化依赖服务（Redis、数据库、Etcd等）
	impl.NewImpl()

	// 初始化gRPC和HTTP服务器
	s := server.New(nil)

	// 创建微服务实例
	srv := service.New(
		s.Grpc,
		&service.Options{
			Addr:        config.Spec.Addr,         // 服务监听地址
			MsConf:      config.Spec.MicroService, // 微服务配置
			EtcdClient:  impl.EtcdService,         // Etcd客户端
			GatewayCtx:  s.Ctx,                    // Gateway上下文
			GatewayConf: config.Spec.Gateway,      // Gateway配置
			GatewayMux:  s.Mux,                    // Gateway路由器
		},
	)

	// 确保程序退出时优雅停止服务
	defer srv.Stop()

	// 启动服务并开始监听请求
	srv.Start()
}

func main() {
	Run()
}
