package main

import (
	"context"
	"fmt"
	"time"
)

var timerSinceCtxKey = ctxKey("timerSince")

func setTimerSince(ctx context.Context) context.Context {
	return context.WithValue(ctx, timerSinceCtxKey, time.Now())
}

func getTimerSince(ctx context.Context) time.Duration {
	return time.Since(ctx.Value(timerSinceCtxKey).(time.Time))
}

func checkTimeout(ctx context.Context) {
	select {
	case <-ctx.Done():
		d := getTimerSince(ctx)

		if newRelicEnabled {
			sendTimeoutToNewRelic(ctx, d)
		}

		if prometheusEnabled {
			incrementPrometheusErrorsTotal("timeout")
		}

		panic(newError(503, fmt.Sprintf("Timeout after %v", d), "Timeout"))
	default:
		// Go ahead
	}
}