package bootstrap

import (
	"PaymentCenter/app/jobs"
	"PaymentCenter/app/jobs/basejob"
	"PaymentCenter/app/utils/snowflake"
	"PaymentCenter/config"
	"github.com/qit-team/snow-core/db"
	"github.com/qit-team/snow-core/kernel/close"
	"github.com/qit-team/snow-core/kernel/container"
	"github.com/qit-team/snow-core/log/accesslogger"
	"github.com/qit-team/snow-core/log/logger"
	"github.com/qit-team/snow-core/redis"
)

// 全局变量
var App *container.Container

/**
 * 服务引导程序
 */
func Bootstrap(conf *config.Config) (err error) {
	//容器
	App = container.App

	//注册db服务
	//第一个参数为注入别名,第二个参数为配置,第三个参数可选为是否懒加载
	err = db.Pr.Register(db.SingletonMain, conf.Db)
	//cacher := caches.NewLRUCacher2(caches.NewMemoryStore(), time.Hour, 1000)
	//db.GetDb().SetDefaultCacher(cacher)

	if err != nil {
		return
	}

	//注册redis服务
	err = redis.Pr.Register(redis.SingletonMain, conf.Redis)
	if err != nil {
		return
	}

	//注册mns服务
	//err = alimns.Pr.Register(alimns.SingletonMain, conf.Mns, true)
	//if err != nil {
	//	return
	//}

	//注册日志类服务
	err = logger.Pr.Register(logger.SingletonMain, conf.Log, true)
	if err != nil {
		return
	}

	//注册access log服务
	err = accesslogger.Pr.Register(accesslogger.SingletonMain, conf.Log)
	if err != nil {
		return
	}

	//注册应用停止时调用的关闭服务
	close.MultiRegister(db.Pr, redis.Pr)
	////Register
	//_, err = utils.GetNaocosClient().RegisterInstance(vo.RegisterInstanceParam{
	//	Ip:          utils.GetHostIp(),
	//	Port:        uint64(conf.Api.Port),
	//	ServiceName: "snow",
	//	GroupName:   "group-d",
	//	ClusterName: "cluster-snow",
	//	Weight:      10,
	//	Enable:      true,
	//	Healthy:     true,
	//	Ephemeral:   true,
	//	Metadata:    map[string]string{},
	//})
	//
	//utils.Log(nil, "nacos err", err)

	// 目前使用单机,后续分布式需要改
	err = snowflake.InitSnowflake(1)
	if err != nil {
		return err
	}

	//注册job register,为了非job模式的消息入队调用
	basejob.SetJobRegister(jobs.RegisterWorker)
	return nil
}