package main

import (
	"mtp20access/core"
	"mtp20access/global"
	"mtp20access/initialize"
	"mtp20access/publish"
	"mtp20access/quote_publish"

	"go.uber.org/zap"
)

// @title                      Swagger Example API
// @version                    0.0.1
// @description                新接入服务
// @securityDefinitions.apikey ApiKeyAuth
// @in                         header
// @name                       x-token
// @BasePath                   /api
func main() {
	// 初始化Viper
	global.M2A_VP = core.Viper()

	// 初始化zap日志库
	global.M2A_LOG = core.Zap()
	zap.ReplaceGlobals(global.M2A_LOG)

	// 初始化redis服务
	initialize.Redis()
	// 从redis加载jwt数据

	// xorm连接数据库
	global.M2A_DB = initialize.XormOracle()
	if global.M2A_DB != nil {
		// 程序结束前关闭数据库链接
		defer global.M2A_DB.DB().Close()
	} else {
		return
	}

	// 连接RabbitMQ
	global.M2A_RABBITMQ = initialize.RabbitMQ()
	if global.M2A_RABBITMQ != nil {
		defer global.M2A_RABBITMQ.Connection.Close()
	} else {
		return
	}
	// 初始化功能码主题MAP
	initialize.InitFuncodeTopic()
	// 订阅RabbitMQ回复主题
	if err := initialize.RabbitMQSubscribeTopic(); err != nil {
		return
	}
	// 开始接收RabbitMQ信息
	initialize.StartRabbitMQReceive()

	// 初始化订阅器
	global.M2A_Publish = publish.NewPublisher()

	// 连接行情发布服务
	if global.M2A_CONFIG.System.NeedQuotePublish {
		go quote_publish.QuotePublishSev.Run()
	}

	// 启动Http API 服务
	core.RunApiServer()
	defer global.M2A_REDIS.Close()
}
