package server

import (
	"github.com/gin-gonic/gin"
	"github.com/urfave/cli/v2"

	"github.com/pingcap-inc/security/baseline/api"
	"github.com/pingcap-inc/security/baseline/internal/sqlite"
)

// Run runs the scan
func Run(cliCtx *cli.Context) error {
	if cliCtx.Bool("debug") {
		gin.SetMode(gin.DebugMode)
	} else {
		gin.SetMode(gin.ReleaseMode)
	}

	app := gin.Default()

	db, err := sqlite.Open(cliCtx.String("cache-dir"))
	if err != nil {
		return err
	}

	app.Use(func(ctx *gin.Context) {
		ctx.Set("db", db)
		ctx.Set("GITHUB_TOKEN", cliCtx.String("github-token"))
		ctx.Set("CACHE_DIR", cliCtx.String("cache-dir"))
		ctx.Set("TIMEOUT", cliCtx.Duration("timeout"))
		ctx.Next()
	})

	app.Use(allowCORS)

	api.ApplyRoutes(app)

	return app.Run(cliCtx.String("listen"))
}
