package webServer

import (
	"net/http"

	"goutil/typeUtil"
)

// webserver接口
type IWebServer interface {
	// 注册API
	// path：注册的访问路径
	// callback：回调方法
	// configObj：Handler配置对象
	RegisterHandler(path string, handlerFuncObj handlerFunc, configObj *HandlerConfig)

	// 注册回调-增加用户自定义数据
	RegisterHandlerWithUserData(path string, handlerFuncObj handlerFunc, configObj *HandlerConfig, userData interface{})

	RegisterRegexHandler(path string, handlerFuncObj handlerFunc, configObj *HandlerConfig)

	// 注册正则回调-增加用户自定义数据
	RegisterRegexHandlerWithUserData(path string, handlerFuncObj handlerFunc, configObj *HandlerConfig, userData interface{})

	// 设定Http Header信息
	SetHeader(header map[string]string)

	// 设定HTTP请求方法
	SetMethod(method string)

	// 设定当HTTP请求方法无效时，调用的处理器
	SetInvalidMethodHandler(handler func(*Context))

	// 设置WebServer请求是否经过了负载均衡中转
	SetIfDelegate(ifDelegate bool)

	// 设定默认页的处理器
	SetDefaultPageHandler(handler func(*Context))

	// 设定未找到指定的回调时的处理器
	SetNotFoundPageHandler(handler func(*Context))

	// 设置异常处理函数（默认只会记录在文件）
	SetUnHandledPanicHandler(handler func(context *Context, errObj interface{}))

	// 设定在Debug模式下是否需要验证IP地址
	SetIfCheckIPWhenDebug(value bool)

	// 设定当IP无效时调用的处理器
	SetIPInvalidHandler(handler func(*Context))

	// 设定用于检测参数是否有效的处理器
	SetParamCheckHandler(handler func(typeUtil.MapData, []string, []string) ([]string, []string, bool))

	// 设定当检测到参数无效时调用的处理器
	SetParamInvalidHandler(handler func(*Context, []string, []string))

	// 设定处理请求数据的处理器（例如压缩、解密等）
	SetRequestDataHandler(handler func(*Context, []byte) ([]byte, error))

	// 设定处理响应数据的处理器（例如压缩、加密等）
	SetResponseDataHandler(handler func(*Context, []byte) ([]byte, error))

	// 设定请求执行时间的处理器
	SetExecuteTimeHandler(handler func(*Context))

	// http应答处理
	// responseWriter:应答对象
	// request:请求对象
	ServeHTTP(responseWriter http.ResponseWriter, request *http.Request)
}
