package metrics

import (
	"context"
	"errors"
	"net/http"

	"github.com/nspcc-dev/neo-go/pkg/config"
	"go.uber.org/zap"
)

// Service serves metrics.
type Service struct {
	*http.Server
	config      config.BasicService
	log         *zap.Logger
	serviceType string
}

// Start runs http service with the exposed endpoint on the configured port.
func (ms *Service) Start() {
	if ms.config.Enabled {
		ms.log.Info("service is running", zap.String("endpoint", ms.Addr))
		err := ms.ListenAndServe()
		if err != nil && !errors.Is(err, http.ErrServerClosed) {
			ms.log.Warn("service couldn't start on configured port")
		}
	} else {
		ms.log.Info("service hasn't started since it's disabled")
	}
}

// ShutDown stops the service.
func (ms *Service) ShutDown() {
	if !ms.config.Enabled {
		return
	}
	ms.log.Info("shutting down service", zap.String("endpoint", ms.Addr))
	err := ms.Shutdown(context.Background())
	if err != nil {
		ms.log.Error("can't shut service down", zap.Error(err))
	}
}