package publicconnectionsetting

import (
	"context"

	globalngv1 "github.com/tidbcloud/tidb-management-service/api/spec/global/nextgen/v1"
	"github.com/tidbcloud/tidb-management-service/nextgen-global-service/domain/service/publicconnectionsetting"
	"github.com/tidbcloud/tidb-management-service/utilities/bizerr"
)

func NewServer(
	svc publicconnectionsetting.Service,
) globalngv1.PublicConnectionSettingServiceServer {
	return &server{
		Service: svc,
	}
}

type server struct {
	publicconnectionsetting.Service
}

func (s *server) GetPublicConnectionSetting(
	ctx context.Context,
	req *globalngv1.GetPublicConnectionSettingRequest,
) (*globalngv1.PublicConnectionSetting, error) {
	pcs, err := s.Get(ctx, req)
	if err != nil {
		return nil, err
	}
	if pcs == nil || pcs.PublicConnectionSetting == nil {
		return nil, bizerr.New(bizerr.ErrCodeRecordNotFound, "public connection setting not found")
	}
	return pcs.PublicConnectionSetting, nil
}

func (s *server) UpdatePublicConnectionSetting(
	ctx context.Context,
	req *globalngv1.UpdatePublicConnectionSettingRequest,
) (*globalngv1.PublicConnectionSetting, error) {
	pcs, err := s.Update(ctx, req)
	if err != nil {
		return nil, err
	}
	if pcs == nil || pcs.PublicConnectionSetting == nil {
		return nil, bizerr.New(bizerr.ErrCodeUnknown, "failed to update public connection setting")
	}
	return pcs.PublicConnectionSetting, nil
}
