package main

import (
	"fmt"

	"github.com/gin-gonic/gin"
	"go.uber.org/zap"
)

func main() {

	//加载配置
	cfg, err := LoadConfig()
	if err != nil {
		panic(err)
	}

	//初始化日志
	err = InitLogger(cfg.App.Env)
	if err != nil {
		panic(err)
	}

	defer Logger.Sync()

	//初始化数据库
	err = InitDB(cfg)
	if err != nil {
		Logger.Fatal("数据库初始化失败", zap.Error(err))
	}

	//创建Gin应用
	r := gin.Default()

	//中间件
	r.Use(LoggingMiddleware())
	r.Use(CORSMiddleware())

	// 公开路由
	public := r.Group("/api")
	{
		public.GET("/health", HealthCheck)
		public.POST("/register", Register(cfg))
		public.POST("/login", Login(cfg))
	}

	// 受保护的路由
	protected := r.Group("/api")
	protected.Use(AuthMiddleware(cfg))
	{
		protected.GET("/profile", GetProfile)
		protected.PUT("/profile", UpdateProfile)
	}

	// 启动服务器
	addr := fmt.Sprintf(":%d", cfg.App.Port)
	Logger.Info("Server starting",
		zap.String("app", cfg.App.Name),
		zap.Int("port", cfg.App.Port),
		zap.String("env", cfg.App.Env),
	)

	if err = r.Run(addr); err != nil {
		Logger.Fatal("Server error", zap.Error(err))
	}
}
