package common

import (
	"errors"
	"net/http"

	"sigs.k8s.io/controller-runtime/pkg/healthz"

	"zotregistry.dev/zot/pkg/api/config"
	"zotregistry.dev/zot/pkg/log"
)

var errNotReady = errors.New("not ready yet")

type Healthz struct {
	log     log.Logger
	ready   bool
	started bool
	Handler *healthz.Handler
}

func NewHealthzServer(appConfig *config.Config, logger log.Logger) *Healthz {
	var health Healthz
	health.ready = false
	health.started = false
	health.log = logger
	health.Handler = &healthz.Handler{Checks: map[string]healthz.Checker{
		"livez":    health.livez,
		"readyz":   health.readyz,
		"startupz": health.startupz,
	}}

	return &health
}

func (h *Healthz) livez(req *http.Request) error {
	return nil
}

func (h *Healthz) readyz(req *http.Request) error {
	if h.ready {
		return nil
	}

	return errNotReady
}

func (h *Healthz) startupz(req *http.Request) error {
	if h.started {
		return nil
	}

	return errNotReady
}

func (h *Healthz) Ready() {
	h.ready = true
	h.log.Debug().Msg("ready")
}

func (h *Healthz) Started() {
	h.started = true
	h.log.Debug().Msg("started")
}
