package main

import (
	"ai_xhs/config"
	"ai_xhs/database"
	"ai_xhs/middleware"
	"ai_xhs/router"
	"ai_xhs/service"
	"flag"
	"fmt"
	"log"

	"github.com/gin-gonic/gin"
)

func main() {
	// 解析命令行参数
	env := flag.String("env", "dev", "运行环境: dev, prod")
	flag.Parse()

	// 加载配置
	if err := config.LoadConfig(*env); err != nil {
		log.Fatalf("配置加载失败: %v", err)
	}

	// 初始化数据库
	if err := database.InitDB(); err != nil {
		log.Fatalf("数据库初始化失败: %v", err)
	}

	// 自动迁移数据库表
	//if err := database.AutoMigrate(); err != nil {
	//	log.Fatalf("数据库迁移失败: %v", err)
	//}

	// 初始化定时任务
	if config.AppConfig.Scheduler.Enabled {
		scheduler := service.NewSchedulerService(
			config.AppConfig.Scheduler.MaxConcurrent,
			config.AppConfig.Scheduler.PublishTimeout,
		)
		if err := scheduler.Start(config.AppConfig.Scheduler.PublishCron); err != nil {
			log.Fatalf("定时任务启动失败: %v", err)
		}
		log.Println("定时任务服务已启动")
		defer scheduler.Stop()
	} else {
		log.Println("定时任务服务已禁用")
	}

	// 设置运行模式
	gin.SetMode(config.AppConfig.Server.Mode)

	// 创建路由
	r := gin.New()
	
	// 添加中间件
	r.Use(gin.Recovery()) // 崩溃恢复
	r.Use(middleware.RequestLogger()) // API请求日志

	// 设置路由
	router.SetupRouter(r)

	// 启动服务
	addr := fmt.Sprintf(":%d", config.AppConfig.Server.Port)
	log.Printf("服务启动在端口 %s, 环境: %s", addr, *env)
	if err := r.Run(addr); err != nil {
		log.Fatalf("服务启动失败: %v", err)
	}
}
