package main

import (
	"errors"
	"flag"
	"log"
	"net/http"
	"time"

	"github.com/gin-gonic/gin"

	"github.com/pingcap/crm-bot/pkg/config"
	"github.com/pingcap/crm-bot/pkg/job"
	"github.com/pingcap/crm-bot/pkg/util"
)

func main() {
	loc, err := time.LoadLocation("Asia/Shanghai")
	if err != nil {
		log.Fatal(err)
	}
	time.Local = loc

	confFile := flag.String("c", "config.yml", "set config file")
	flag.Parse()
	config.InitConfig(*confFile, "yml", "./etc")

	app, err := NewApp()
	if err != nil {
		log.Fatal(err)
	}
	AutoMigrate(app.DB)
	job.Start()

	app.OnStartup()

	gin.SetMode(config.GetString("ginmode"))
	r := gin.Default()
	RegisterRoute(r, app)
	srv := &http.Server{
		Addr:    ":" + config.GetString("port"),
		Handler: r,
	}

	go func() {
		if err := srv.ListenAndServe(); err != nil && !errors.Is(err, http.ErrServerClosed) {
			log.Fatalf("Listen failed : %s\n", err)
		}
	}()

	util.GracefulShutdown(srv, nil)
	log.Println("Server exiting")
}
