package knowledgeqa

type handlerBase struct {
	deps Dependencies
}

type sessionHandler struct{ *handlerBase }
type turnHandler struct{ *handlerBase }
type citationHandler struct{ *handlerBase }
type policyHandler struct{ *handlerBase }
type feedbackHandler struct{ *handlerBase }
type shareHandler struct{ *handlerBase }

type routeHandlers struct {
	sessions  *sessionHandler
	turns     *turnHandler
	citations *citationHandler
	policy    *policyHandler
	feedback  *feedbackHandler
	shares    *shareHandler
}

func newRouteHandlers(dependencies Dependencies) routeHandlers {
	base := &handlerBase{deps: dependencies}
	return routeHandlers{
		sessions:  &sessionHandler{handlerBase: base},
		turns:     &turnHandler{handlerBase: base},
		citations: &citationHandler{handlerBase: base},
		policy:    &policyHandler{handlerBase: base},
		feedback:  &feedbackHandler{handlerBase: base},
		shares:    &shareHandler{handlerBase: base},
	}
}

func newShareHandler(dependencies Dependencies) *shareHandler {
	return newRouteHandlers(dependencies).shares
}

func newSessionHandler(dependencies Dependencies) *sessionHandler {
	return newRouteHandlers(dependencies).sessions
}

func newTurnHandler(dependencies Dependencies) *turnHandler {
	return newRouteHandlers(dependencies).turns
}

func newCitationHandler(dependencies Dependencies) *citationHandler {
	return newRouteHandlers(dependencies).citations
}

func newPolicyHandler(dependencies Dependencies) *policyHandler {
	return newRouteHandlers(dependencies).policy
}

func newFeedbackHandler(dependencies Dependencies) *feedbackHandler {
	return newRouteHandlers(dependencies).feedback
}
