package main

import (
	"flag"
	"log"
	"net/http"
	"time"
	_ "time/tzdata"

	"github.com/pingcap/jira-bot/pkg/config"
	"github.com/pingcap/jira-bot/pkg/job"

	"github.com/cockroachdb/errors"
	"github.com/pingcap/jira-bot/service"

	"github.com/pingcap/jira-bot/pkg/util"

	"github.com/pingcap/jira-bot/model"

	"github.com/gin-gonic/gin"
	"github.com/pingcap/jira-bot/route"
)

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

	confFile := flag.String("c", "config-boilerplate.yml", "set config file")
	flag.Parse()
	config.InitConfig(*confFile, "yml", "./etc")
	model.SetRulePath(config.GetString("rulepath"))
	err = model.InitApp()
	if err != nil {
		log.Fatal(err)
	}

	_, _ = job.AddJob("@daily", job.JobRunner(service.DailyRun))
	service.CheckIssuesOnStartup()

	gin.SetMode(config.GetString("ginmode"))
	r := gin.Default()
	route.RegisterRoute(r)
	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, model.GetApp().ShutDown)
	log.Println("Server exiting")
}
