package core

import (
	"errors"

	"github.com/gin-gonic/gin"
)

const (
	// ServerNameAPI is a HTTP server name for API.
	ServerNameAPI = "api"
	// ServerNameCMS is a HTTP server name for CMS.
	ServerNameCMS = "cms"
	// ServiceNameHTTP is a name for service responsible for HTTP servers controlloing.
	ServiceNameHTTP = "http servers"
)

var (
	// ErrHTTP указывает на ошибку в сервисе управления HTTP серверами.
	ErrHTTP = errors.New("HTTP server")
	// ErrHTTPAssetsBundleAlreadyRegistered говорит о попытке зарегистрировать бандл с ассетами с уже использованным
	// именем.
	ErrHTTPAssetsBundleAlreadyRegistered = errors.New("assets bundle already registered")
	// ErrHTTPCMSAddressInvalid говорит о неправильно заданном адресе для прослушки, который был получен из
	// переменных окружения.
	ErrHTTPCMSAddressInvalid = errors.New("CMS server address invalid")
	// ErrHTTPServerNotFound возникает при попытке получить неизвестный HTTP сервер.
	ErrHTTPServerNotFound = errors.New("HTTP server not found")
	// ErrHTTPServiceIsInvalid говорит о неправильной имплементации сервиса управления HTTP серверами.
	ErrHTTPServiceIsInvalid = errors.New("service implementation is invalid")
)

// HTTP это интерфейс для сервиса управления HTTP серверами.
type HTTP interface {
	RegisterHandler(serverName, method, path string, handler func(*gin.Context)) error
	ReplyJSON(ctx *gin.Context, statusCode int, data interface{})
}
