package httpserver

import "net/http"

type Server struct {
	serviceName string
	ready       func() bool
	mux         *http.ServeMux
}

func New(serviceName string, ready func() bool, debug DebugAPI) *Server {
	s := &Server{serviceName: serviceName, ready: ready, mux: http.NewServeMux()}
	s.mux.HandleFunc("GET /{$}", handleRoot(serviceName))
	s.mux.HandleFunc("GET /healthz", handleHealthz(serviceName))
	s.mux.HandleFunc("GET /readyz", handleReadyz(serviceName, ready))
	s.mux.HandleFunc("GET /version", handleVersion(serviceName))

	if debug.Jobs != nil {
		s.mux.HandleFunc("GET /analysis-jobs/{job_id}", handleAnalysisJob(debug.Jobs))
	}
	if debug.Results != nil {
		s.mux.HandleFunc("GET /analysis/{analysis_id}", handleAnalysisResult(debug.Results))
	}

	return s
}

func (s *Server) Handler() http.Handler {
	return s.mux
}
