package main

import (
	"log"

	"github.com/gin-gonic/gin"
	"github.com/gouki/lunar-server/internal/config"
	"github.com/gouki/lunar-server/internal/handler"
	"github.com/gouki/lunar-server/internal/middleware"
	"github.com/gouki/lunar-server/internal/service"
)

func main() {
	// 加载配置
	cfg := config.Load()

	// 初始化数据库
	if err := config.InitDB(cfg); err != nil {
		log.Fatalf("Failed to initialize database: %v", err)
	}

	// 启动机器人许愿定时任务
	wishService := service.NewWishService()
	wishService.StartRobotWishJob()

	// 设置运行模式
	if cfg.Server.Env == "production" {
		gin.SetMode(gin.ReleaseMode)
	}

	// 创建路由
	r := gin.Default()

	// 中间件
	r.Use(middleware.CORS())
	r.Use(middleware.Logger())

	// 静态文件
	r.Static("/static", "./web/static")
	r.StaticFile("/", "./web/index.html")

	// API 路由
	api := r.Group("/api")
	{
		// 用户相关
		user := api.Group("/user")
		{
			user.POST("/login", handler.UserLogin)
			user.POST("/logout", handler.UserLogout)
			user.GET("/profile", middleware.Auth(), handler.GetUserProfile)
			user.PUT("/profile", middleware.Auth(), handler.UpdateUserProfile)
			user.POST("/auth", handler.WechatAuth)
		}

		// 支付相关
		pay := api.Group("/pay")
		{
			pay.POST("/create", middleware.Auth(), handler.CreateOrder)
			pay.POST("/notify", handler.PayNotify)
			pay.GET("/status/:orderId", handler.GetPayStatus)
		}

		// 订单相关
		order := api.Group("/order")
		{
			order.GET("/list", middleware.Auth(), handler.GetOrderList)
			order.GET("/:id", middleware.Auth(), handler.GetOrderDetail)
			order.POST("/cancel/:id", middleware.Auth(), handler.CancelOrder)
		}

		// 许愿相关
		wish := api.Group("/wish")
		{
			wish.GET("/trees", handler.GetWishTrees)
			wish.GET("/tree", handler.GetWishTree)
			wish.GET("/tree/:id/wishes", handler.GetTreeWishes)
			wish.POST("/create", middleware.Auth(), handler.CreateWish)
			wish.GET("/list", handler.GetWishList)
			wish.GET("/:id", handler.GetWishDetail)
			wish.DELETE("/:id", middleware.Auth(), handler.DeleteWish)
			wish.GET("/products", handler.GetWishProducts)
		}
	}

	// 管理后台路由（Inertia.js）
	admin := r.Group("/admin")
	admin.Use(middleware.AdminAuth())
	{
		admin.GET("/", handler.AdminDashboard)
		admin.GET("/users", handler.AdminUsers)
		admin.GET("/orders", handler.AdminOrders)
		admin.GET("/wishes", handler.AdminWishes)
		admin.GET("/settings", handler.AdminSettings)
	}

	// 启动服务器
	addr := ":" + cfg.Server.Port
	log.Printf("Server starting on %s", addr)
	if err := r.Run(addr); err != nil {
		log.Fatalf("Failed to start server: %v", err)
	}
}
