package main

import (
	"context"
	"net/http"

	"github.com/gin-gonic/gin"
	"github.com/tidbcloud/tiinf/monitor/titracing"
	"github.com/tidbcloud/tiinf/storage/tigorm"
	"github.com/tidbcloud/tiinf/transport/http/tigin"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"gorm.io/gorm/logger"
)

var db *gorm.DB

func init() {
	cfg := &gorm.Config{
		// `tigorm.NewLoggerAdapter` log SQL and trace id where encounter error
		Logger: tigorm.NewLoggerAdapter(true, logger.Info),
	}
	var err error
	// `db` MUST be initialized with `tigorm`
	db, err = tigorm.InitDB(mysql.Open("root:root@tcp(localhost:3306)/nightly_ms_central"), cfg)
	if err != nil {
		panic("init db failed")
	}
}

func main() {
	// SHOULD be integrated with `titracing`
	titracing.InitJaeger("exmaple") //nolint:errcheck

	engine := tigin.Default()

	engine.GET("/example", func(c *gin.Context) {
		ctx := c.Request.Context()
		Query(ctx)
		c.String(http.StatusOK, "Hello World")
	})

	engine.Run() //nolint:errcheck
}

func Query(ctx context.Context) {
	// MUST pass the context to `db` use `WithContext`
	db.WithContext(ctx).Exec("select * from t")
}
