package main

import (
	"context"
	"os"
	"os/signal"
	"syscall"

	"go.uber.org/zap"
)

// newGracefulContext returns graceful context
func newGracefulContext(l *zap.Logger) context.Context {
	ctx, cancel := context.WithCancel(context.Background())
	go func() {
		ch := make(chan os.Signal, 1)
		signal.Notify(ch, syscall.SIGINT, syscall.SIGTERM, syscall.SIGHUP)
		sig := <-ch
		l.Info("received signal",
			zap.String("signal", sig.String()))
		cancel()
	}()
	return ctx
}