package server

import (
	"fmt"

	"github.com/tidbcloud/AgentTeam/internal/kbgovernance"
)

func (s *Server) WikiGenerationAuthority() kbgovernance.WikiGenerationAuthority {
	if s == nil {
		return nil
	}
	return s.kbGovernance
}

func (s *Server) KBGovernanceAuthority() kbgovernance.Authority {
	if s == nil {
		return nil
	}
	return s.kbGovernance
}

// ConfigureWikiGenerationApprovalGateway connects the embedded runtime to
// AgentTeam's generic Approval authority before the enclosing HTTP router starts.
func (s *Server) ConfigureWikiGenerationApprovalGateway(gateway kbgovernance.WikiGenerationApprovalGateway) error {
	if s == nil || s.kbGovernance == nil {
		return fmt.Errorf("configure Wiki generation Approval gateway: KB governance is not configured")
	}
	configurator, ok := s.kbGovernance.(interface {
		ConfigureWikiGenerationApprovalGateway(kbgovernance.WikiGenerationApprovalGateway)
	})
	if !ok {
		return fmt.Errorf("configure Wiki generation Approval gateway: authority is not configurable")
	}
	configurator.ConfigureWikiGenerationApprovalGateway(gateway)
	return nil
}

func (s *Server) ConfigureWikiGenerationTerminalGateway(gateway kbgovernance.WikiGenerationTerminalGateway) error {
	if s == nil || s.kbGovernance == nil {
		return fmt.Errorf("configure Wiki generation terminal gateway: KB governance is not configured")
	}
	configurator, ok := s.kbGovernance.(interface {
		ConfigureWikiGenerationTerminalGateway(kbgovernance.WikiGenerationTerminalGateway)
	})
	if !ok {
		return fmt.Errorf("configure Wiki generation terminal gateway: authority is not configurable")
	}
	configurator.ConfigureWikiGenerationTerminalGateway(gateway)
	return nil
}

func (s *Server) ConfigurePublicationApprovalGateway(gateway kbgovernance.PublicationApprovalGateway) error {
	if s == nil || s.kbGovernance == nil {
		return fmt.Errorf("configure publication Approval gateway: KB governance is not configured")
	}
	configurator, ok := s.kbGovernance.(interface {
		ConfigurePublicationApprovalGateway(kbgovernance.PublicationApprovalGateway)
	})
	if !ok {
		return fmt.Errorf("configure publication Approval gateway: authority is not configurable")
	}
	configurator.ConfigurePublicationApprovalGateway(gateway)
	return nil
}
