package server

import (
	cs "git.loafle.net/commons/server-go"
	oe "git.loafle.net/overflow/external-go"
	ogrs "git.loafle.net/overflow/gateway_rpc/server"
	"git.loafle.net/overflow/probe_gateway_metric/config"
)

type ServerHandler interface {
	ogrs.ServerHandler
}

type ServerHandlers struct {
	ogrs.ServerHandlers

	Config *config.Config
}

func (sh *ServerHandlers) Init(serverCtx cs.ServerCtx) error {
	if err := sh.ServerHandlers.Init(serverCtx); nil != err {
		return err
	}
	oe.InitPackage(sh.Config.External)

	return nil
}

func (sh *ServerHandlers) OnStart(serverCtx cs.ServerCtx) error {
	if err := sh.ServerHandlers.OnStart(serverCtx); nil != err {
		return err
	}

	oe.StartPackage(sh.Config.External)

	return nil
}

func (sh *ServerHandlers) OnStop(serverCtx cs.ServerCtx) {
	oe.StopPackage(sh.Config.External)

	sh.ServerHandlers.OnStop(serverCtx)
}

func (sh *ServerHandlers) Destroy(serverCtx cs.ServerCtx) {
	oe.DestroyPackage(sh.Config.External)

	sh.ServerHandlers.Destroy(serverCtx)
}