package main

import (
	"fmt"
	"github.com/astaxie/beego"
	_ "github.com/go-sql-driver/mysql"
	"gitlab.fjmaimaimai.com/mmm-go/gocomm/common"
	"gitlab.fjmaimaimai.com/mmm-go/gocomm/config"
	"gitlab.fjmaimaimai.com/mmm-go/gocomm/pkg/log"
	"gitlab.fjmaimaimai.com/mmm-go/gocomm/pkg/orm"
	"gitlab.fjmaimaimai.com/mmm-go/gocomm/pkg/redis"
	"gitlab.fjmaimaimai.com/mmm-go/gocomm/pkg/websocket"
	"opp/controllers"
	"opp/internal/utils"
	_ "opp/routers"
	"opp/services/im"
	"time"
)

func init() {
	time.Local = time.FixedZone("CST", 3600*8)
	log.InitLog(config.Logger{
		Filename: beego.AppConfig.String("aliyun_logs_access"),
		Level:    fmt.Sprintf("%v", utils.ResolveLogLevel(beego.AppConfig.String("log_level"))),
	})
	//TODO:kafka log配置
	//log.InitKafkaLogger(log.KafkaConfig{
	//	Topic: "ability",
	//	Addrs: []string{"127.0.0.1:9092"},
	//	Level: 6,
	//})
	err := redis.InitWithDb(100, beego.AppConfig.String("redis_add_port"), beego.AppConfig.String("redis_auth"), "0")
	if err != nil {
		log.Fatal(err, beego.AppConfig.String("redis_add_port"), beego.AppConfig.String("redis_auth"))
		//panic(err)
	}
	dataSource := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?loc=Asia%%2FShanghai",
		beego.AppConfig.String("mysql_user"),
		beego.AppConfig.String("mysql_password"),
		beego.AppConfig.String("mysql_host"),
		beego.AppConfig.String("mysql_port"),
		beego.AppConfig.String("mysql_db_name"),
	)
	orm.NewBeeormEngine(config.Mysql{
		//AliasName:  "default",
		DataSource: dataSource,
		MaxIdle:    100,
		MaxOpen:    100,
	})
	//TODO:邮件服务配置
	common.InitMailService(&common.MailConfig{
		//Host:"smtp.qq.com",
		//Port:465,
		//From:"785410885@qq.com",
		//Password:"ibfduqhfmgypbffe", //授权码
		//IsUseSsl:true,
	})
	im.InitImClient(beego.AppConfig.String("net_im_base_url"), beego.AppConfig.String("net_im_app_key"), beego.AppConfig.String("net_im_app_secret"))
	websocket.InitWebsocketConnmgrs(10)
}

func main() {
	defer func() {
		log.Info("app on stop!")
	}()
	beego.InsertFilter("/*", beego.BeforeRouter, controllers.FilterComm)
	log.Info("app on start!")
	log.Info("Beego Run Mode:", beego.BConfig.RunMode)

	beego.Run()
}