package logid

import (
	"context"
	"fmt"
	"time"

	"github.com/rs/xid"
)

type ctxKey string

var (
	CtxKey             = ctxKey("x-pingcap-requestid")
	LogidHTTPHeaderKey = "x-pingcap-requestid"
	GRPCHeaderKey      = "x-pingcap-requestid"
)

func WithLogid(ctx context.Context, logid string) context.Context {
	return context.WithValue(ctx, CtxKey, logid)
}

func GetLogid(ctx context.Context) string {
	v, ok := ctx.Value(CtxKey).(string)
	if ok {
		return v
	}
	return ""
}

func GenLogid() string {
	return GenerateLogidWithTime(time.Now())
}

func GenerateLogidWithTime(t time.Time) string {
	id := xid.NewWithTime(t)
	return fmt.Sprintf("%s%s", t.Format("20060102150405"), id.String())
}
