package main

import (
	"background/config"
	"background/controller"
	"background/controller/middle"
	"background/db"
	"background/logs"
	"github.com/gin-gonic/gin"
	"github.com/tommy351/gin-sessions"
	"log"
	"strconv"
)

var (
	userController = controller.UserController{}
	mailContoller  = controller.MailController{}
)

func InitConfig() {
	e := config.Init("user.yaml")
	if nil != e {
		log.Println(e.Error())
	}
}
func InitMysql() {
	c := config.GetMysqlConfig()
	if c == nil {
		logs.Error("cannnot connect mysql server")
	} else {
		db.Init()
	}
}
func InitRedis() {
	e := config.InitRedis()
	if nil != e {
		logs.Error(e.Error())
		return
	}
}
func InitLogs() {
	logs.Init(config.GetLogConfig().Dir, config.GetLogConfig().File, config.GetLogConfig().Level, config.GetLogConfig().SaveFile)
}
func CORSMiddleware(c *gin.Context) {
	ori := c.Request.Header.Get("Origin")
	c.Writer.Header().Set("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE, UPDATE")
	c.Writer.Header().Set("Access-Control-Allow-Origin", ori)
	c.Writer.Header().Set("Access-Control-Max-Age", "86400")
	c.Writer.Header().Set("Access-Control-Allow-Headers", "X-Requested-With, Content-Type, Origin, Authorization, Accept, Client-Security-Token, Accept-Encoding, x-access-token")
	c.Writer.Header().Set("Access-Control-Expose-Headers", "Content-Length")
	c.Writer.Header().Set("Access-Control-Allow-Credentials", "true")

	if c.Request.Method == "OPTIONS" {
		log.Println("OPTIONS")
		c.AbortWithStatus(200)
	} else {
		c.Next()
	}
}

func main() {
	InitConfig()
	InitLogs()
	InitRedis()
	InitMysql()

	mgo := db.GetMongoDb()
	mgo = mgo
	config.GetMongoDBConfig()
	r := gin.Default()
	store := sessions.NewCookieStore([]byte("secret123"))
	r.Use(sessions.Middleware("sess_store", store))
	r.Use(CORSMiddleware)
	api := r.Group("/api")
	{
		/** 添加或修改用户 **/
		api.POST("/user", userController.SetUser)
		/** 删除用户 **/
		api.DELETE("/user", userController.DelUser)
		/** 获取单独用户详情信息 methods(id) **/
		api.GET("/user", middle.AuthMiddle,userController.GetUser)
		/** 获取所有用户 **/
		api.GET("/users", middle.AuthMiddle,userController.Users)
		api.POST("/search_users",middle.AuthMiddle,userController.SerarchUsers)
		/** 用户登录 **/
		api.POST("/login", userController.Login)
		/** 用户注册 **/
		api.POST("/register", userController.Register)
		/** 用户退出登陆 **/
		api.GET("/logout", middle.AuthMiddle,userController.Logout)
		api.POST("/verify", mailContoller.OnSendEmailCode)
		/** 修改密码**/
		api.POST("modify_pass",middle.AuthMiddle,userController.ModifyPasswd)

		api.GET("/article/:id",controller.GetArticle)
		api.POST("articles",controller.GetArticles)
		api.PUT("/article",controller.AddArticle)  // 添加文章
		api.GET("article_type",controller.ArticlesType)  //获取所有文章分类
	}

	e := r.Run(":" + strconv.Itoa(config.GetPort()))
	if nil != e {
		log.Print(e.Error())
	}
}
