package client

import (
	"context"

	userv1 "hyapp.local/api/proto/user/v1"

	"google.golang.org/grpc"
)

// UserAuthClient 抽象 gateway 对 user-service 登录注册能力的依赖。
type UserAuthClient interface {
	LoginPassword(ctx context.Context, req *userv1.LoginPasswordRequest) (*userv1.AuthResponse, error)
	LoginThirdParty(ctx context.Context, req *userv1.LoginThirdPartyRequest) (*userv1.AuthResponse, error)
	RegisterThirdParty(ctx context.Context, req *userv1.RegisterThirdPartyRequest) (*userv1.AuthResponse, error)
	CheckThirdPartyRegistered(ctx context.Context, req *userv1.CheckThirdPartyRegisteredRequest) (*userv1.CheckThirdPartyRegisteredResponse, error)
	SetPassword(ctx context.Context, req *userv1.SetPasswordRequest) (*userv1.SetPasswordResponse, error)
	QuickCreateAccount(ctx context.Context, req *userv1.QuickCreateAccountRequest) (*userv1.QuickCreateAccountResponse, error)
	RefreshToken(ctx context.Context, req *userv1.RefreshTokenRequest) (*userv1.RefreshTokenResponse, error)
	Logout(ctx context.Context, req *userv1.LogoutRequest) (*userv1.LogoutResponse, error)
	RecordLoginBlocked(ctx context.Context, req *userv1.RecordLoginBlockedRequest) (*userv1.RecordLoginBlockedResponse, error)
	CheckLoginRiskIPWhitelist(ctx context.Context, req *userv1.CheckLoginRiskIPWhitelistRequest) (*userv1.CheckLoginRiskIPWhitelistResponse, error)
	AppHeartbeat(ctx context.Context, req *userv1.AppHeartbeatRequest) (*userv1.AppHeartbeatResponse, error)
}

// UserIdentityClient 抽象 gateway 对 user-service 短号能力的依赖。
type UserIdentityClient interface {
	GetUserIdentity(ctx context.Context, req *userv1.GetUserIdentityRequest) (*userv1.GetUserIdentityResponse, error)
	ResolveDisplayUserID(ctx context.Context, req *userv1.ResolveDisplayUserIDRequest) (*userv1.ResolveDisplayUserIDResponse, error)
	ChangeDisplayUserID(ctx context.Context, req *userv1.ChangeDisplayUserIDRequest) (*userv1.ChangeDisplayUserIDResponse, error)
	ApplyPrettyDisplayUserID(ctx context.Context, req *userv1.ApplyPrettyDisplayUserIDRequest) (*userv1.ApplyPrettyDisplayUserIDResponse, error)
	ListAvailablePrettyDisplayIDs(ctx context.Context, req *userv1.ListAvailablePrettyDisplayIDsRequest) (*userv1.ListAvailablePrettyDisplayIDsResponse, error)
	ApplyPrettyDisplayIDFromPool(ctx context.Context, req *userv1.ApplyPrettyDisplayIDFromPoolRequest) (*userv1.ApplyPrettyDisplayIDFromPoolResponse, error)
}

// UserProfileClient 抽象 gateway 对 user-service 用户资料能力的依赖。
type UserProfileClient interface {
	GetUser(ctx context.Context, req *userv1.GetUserRequest) (*userv1.GetUserResponse, error)
	BusinessUserLookup(ctx context.Context, req *userv1.BusinessUserLookupRequest) (*userv1.BusinessUserLookupResponse, error)
	GetMyProfileStats(ctx context.Context, req *userv1.GetMyProfileStatsRequest) (*userv1.GetMyProfileStatsResponse, error)
	BatchGetUsers(ctx context.Context, req *userv1.BatchGetUsersRequest) (*userv1.BatchGetUsersResponse, error)
	BatchGetRoomBasicUsers(ctx context.Context, req *userv1.BatchGetRoomBasicUsersRequest) (*userv1.BatchGetRoomBasicUsersResponse, error)
	CompleteOnboarding(ctx context.Context, req *userv1.CompleteOnboardingRequest) (*userv1.CompleteOnboardingResponse, error)
	UpdateUserProfile(ctx context.Context, req *userv1.UpdateUserProfileRequest) (*userv1.UpdateUserProfileResponse, error)
	UpdateUserProfileBackground(ctx context.Context, req *userv1.UpdateUserProfileBackgroundRequest) (*userv1.UpdateUserProfileBackgroundResponse, error)
	UpdateUserContactInfo(ctx context.Context, req *userv1.UpdateUserContactInfoRequest) (*userv1.UpdateUserContactInfoResponse, error)
	UpdateUserWithdrawAddress(ctx context.Context, req *userv1.UpdateUserWithdrawAddressRequest) (*userv1.UpdateUserWithdrawAddressResponse, error)
	ChangeUserCountry(ctx context.Context, req *userv1.ChangeUserCountryRequest) (*userv1.ChangeUserCountryResponse, error)
	AdminChangeUserCountry(ctx context.Context, req *userv1.AdminChangeUserCountryRequest) (*userv1.ChangeUserCountryResponse, error)
	CreateManagerUserBlock(ctx context.Context, req *userv1.CreateManagerUserBlockRequest) (*userv1.CreateManagerUserBlockResponse, error)
	ListManagerUserBlocks(ctx context.Context, req *userv1.ListManagerUserBlocksRequest) (*userv1.ListManagerUserBlocksResponse, error)
	UnblockManagerUser(ctx context.Context, req *userv1.UnblockManagerUserRequest) (*userv1.UnblockManagerUserResponse, error)
}

// UserAvatarUploadClient 抽象专用头像上传的授权与完成阶段。
// 与资料读取接口分离，避免不涉及上传的 gateway 测试替身被迫实现媒体 RPC。
type UserAvatarUploadClient interface {
	AuthorizeUserAvatarUpload(ctx context.Context, req *userv1.AuthorizeUserAvatarUploadRequest) (*userv1.AuthorizeUserAvatarUploadResponse, error)
	CompleteUserAvatarUpload(ctx context.Context, req *userv1.CompleteUserAvatarUploadRequest) (*userv1.CompleteUserAvatarUploadResponse, error)
}

// UserInviteClient 抽象 H5 邀请页对 user-service 邀请人搜索和绑定能力的依赖。
type UserInviteClient interface {
	GetInviteAttribution(ctx context.Context, req *userv1.GetInviteAttributionRequest) (*userv1.GetInviteAttributionResponse, error)
	SearchInviteReferrer(ctx context.Context, req *userv1.SearchInviteReferrerRequest) (*userv1.SearchInviteReferrerResponse, error)
	BindInviteReferrer(ctx context.Context, req *userv1.BindInviteReferrerRequest) (*userv1.BindInviteReferrerResponse, error)
}

// UserSocialClient 抽象 gateway 对 user-service 访问、关注和好友关系能力的依赖。
type UserSocialClient interface {
	RecordProfileVisit(ctx context.Context, req *userv1.RecordProfileVisitRequest) (*userv1.RecordProfileVisitResponse, error)
	ListProfileVisitors(ctx context.Context, req *userv1.ListProfileVisitorsRequest) (*userv1.ListProfileVisitorsResponse, error)
	FollowUser(ctx context.Context, req *userv1.FollowUserRequest) (*userv1.FollowUserResponse, error)
	UnfollowUser(ctx context.Context, req *userv1.UnfollowUserRequest) (*userv1.UnfollowUserResponse, error)
	ListFollowing(ctx context.Context, req *userv1.ListFollowingRequest) (*userv1.ListFollowingResponse, error)
	ApplyFriend(ctx context.Context, req *userv1.ApplyFriendRequest) (*userv1.ApplyFriendResponse, error)
	AcceptFriendApplication(ctx context.Context, req *userv1.AcceptFriendApplicationRequest) (*userv1.AcceptFriendApplicationResponse, error)
	DeleteFriend(ctx context.Context, req *userv1.DeleteFriendRequest) (*userv1.DeleteFriendResponse, error)
	ListFriends(ctx context.Context, req *userv1.ListFriendsRequest) (*userv1.ListFriendsResponse, error)
	ListFriendApplications(ctx context.Context, req *userv1.ListFriendApplicationsRequest) (*userv1.ListFriendApplicationsResponse, error)
	SubmitReport(ctx context.Context, req *userv1.SubmitReportRequest) (*userv1.SubmitReportResponse, error)
}

// UserCPClient 抽象 gateway 对 user-service CP/兄弟/姐妹关系能力的依赖。
type UserCPClient interface {
	ListCPApplications(ctx context.Context, req *userv1.ListCPApplicationsRequest) (*userv1.ListCPApplicationsResponse, error)
	AcceptCPApplication(ctx context.Context, req *userv1.AcceptCPApplicationRequest) (*userv1.AcceptCPApplicationResponse, error)
	RejectCPApplication(ctx context.Context, req *userv1.RejectCPApplicationRequest) (*userv1.RejectCPApplicationResponse, error)
	ListCPRelationships(ctx context.Context, req *userv1.ListCPRelationshipsRequest) (*userv1.ListCPRelationshipsResponse, error)
	ListCPIntimacyLeaderboard(ctx context.Context, req *userv1.ListCPIntimacyLeaderboardRequest) (*userv1.ListCPIntimacyLeaderboardResponse, error)
	PrepareBreakCPRelationship(ctx context.Context, req *userv1.PrepareBreakCPRelationshipRequest) (*userv1.PrepareBreakCPRelationshipResponse, error)
	ConfirmBreakCPRelationship(ctx context.Context, req *userv1.ConfirmBreakCPRelationshipRequest) (*userv1.ConfirmBreakCPRelationshipResponse, error)
	CancelBreakCPRelationship(ctx context.Context, req *userv1.CancelBreakCPRelationshipRequest) (*userv1.CancelBreakCPRelationshipResponse, error)
}

// UserCPFormationGiftFeedClient 是成立礼物 feed 的独立只读能力。
// 它不并入历史 UserCPClient，避免只覆盖关系命令的调用方被迫依赖新的展示接口。
type UserCPFormationGiftFeedClient interface {
	ListCPFormationGiftFeed(ctx context.Context, req *userv1.ListCPFormationGiftFeedRequest) (*userv1.ListCPFormationGiftFeedResponse, error)
}

// UserDeviceClient 抽象 gateway 对 user-service 设备 push token 的依赖。
type UserDeviceClient interface {
	BindPushToken(ctx context.Context, req *userv1.BindPushTokenRequest) (*userv1.BindPushTokenResponse, error)
	DeletePushToken(ctx context.Context, req *userv1.DeletePushTokenRequest) (*userv1.DeletePushTokenResponse, error)
}

// UserCountryQueryClient 抽象 gateway 对 App 注册页国家列表的公开读依赖。
type UserCountryQueryClient interface {
	ListRegistrationCountries(ctx context.Context, req *userv1.ListRegistrationCountriesRequest) (*userv1.ListRegistrationCountriesResponse, error)
	ListLoginRiskBlockedCountries(ctx context.Context, req *userv1.ListLoginRiskBlockedCountriesRequest) (*userv1.ListLoginRiskBlockedCountriesResponse, error)
}

// UserRegionClient 抽象 gateway 对 user-service 区域目录和国家归属查询的依赖。
type UserRegionClient interface {
	ListRegions(ctx context.Context, req *userv1.ListRegionsRequest) (*userv1.ListRegionsResponse, error)
	GetRegion(ctx context.Context, req *userv1.GetRegionRequest) (*userv1.RegionResponse, error)
}

// UserHostClient 抽象 gateway 对 user-service host domain 身份查询能力的依赖。
type UserHostClient interface {
	SearchAgencies(ctx context.Context, req *userv1.SearchAgenciesRequest) (*userv1.SearchAgenciesResponse, error)
	ApplyToAgency(ctx context.Context, req *userv1.ApplyToAgencyRequest) (*userv1.ApplyToAgencyResponse, error)
	InviteAgency(ctx context.Context, req *userv1.InviteAgencyRequest) (*userv1.InviteAgencyResponse, error)
	InviteBD(ctx context.Context, req *userv1.InviteBDRequest) (*userv1.InviteBDResponse, error)
	InviteHost(ctx context.Context, req *userv1.InviteHostRequest) (*userv1.InviteHostResponse, error)
	ListBDLeaderBDs(ctx context.Context, req *userv1.ListBDLeaderBDsRequest) (*userv1.ListBDLeaderBDsResponse, error)
	ListBDLeaderAgencies(ctx context.Context, req *userv1.ListBDLeaderAgenciesRequest) (*userv1.ListBDLeaderAgenciesResponse, error)
	ListBDAgencies(ctx context.Context, req *userv1.ListBDAgenciesRequest) (*userv1.ListBDAgenciesResponse, error)
	ListManagerTeamAgencies(ctx context.Context, req *userv1.ListManagerTeamAgenciesRequest) (*userv1.ListManagerTeamAgenciesResponse, error)
	ListRoleInvitations(ctx context.Context, req *userv1.ListRoleInvitationsRequest) (*userv1.ListRoleInvitationsResponse, error)
	ProcessRoleInvitation(ctx context.Context, req *userv1.ProcessRoleInvitationRequest) (*userv1.ProcessRoleInvitationResponse, error)
	GetHostProfile(ctx context.Context, req *userv1.GetHostProfileRequest) (*userv1.GetHostProfileResponse, error)
	BatchGetHostProfiles(ctx context.Context, req *userv1.BatchGetHostProfilesRequest) (*userv1.BatchGetHostProfilesResponse, error)
	GetBDProfile(ctx context.Context, req *userv1.GetBDProfileRequest) (*userv1.GetBDProfileResponse, error)
	GetCoinSellerProfile(ctx context.Context, req *userv1.GetCoinSellerProfileRequest) (*userv1.GetCoinSellerProfileResponse, error)
	ListActiveCoinSellersInMyRegion(ctx context.Context, req *userv1.ListActiveCoinSellersInMyRegionRequest) (*userv1.ListActiveCoinSellersInMyRegionResponse, error)
	CreateSubCoinSeller(ctx context.Context, req *userv1.CreateSubCoinSellerRequest) (*userv1.CreateSubCoinSellerResponse, error)
	SubmitSubCoinSellerApplication(ctx context.Context, req *userv1.SubmitSubCoinSellerApplicationRequest) (*userv1.SubmitSubCoinSellerApplicationResponse, error)
	ListSubCoinSellers(ctx context.Context, req *userv1.ListSubCoinSellersRequest) (*userv1.ListSubCoinSellersResponse, error)
	CheckCoinSellerSubRelation(ctx context.Context, req *userv1.CheckCoinSellerSubRelationRequest) (*userv1.CheckCoinSellerSubRelationResponse, error)
	GetUserRoleSummary(ctx context.Context, req *userv1.GetUserRoleSummaryRequest) (*userv1.GetUserRoleSummaryResponse, error)
	GetAgency(ctx context.Context, req *userv1.GetAgencyRequest) (*userv1.GetAgencyResponse, error)
	UpdateAgencyProfile(ctx context.Context, req *userv1.UpdateAgencyProfileRequest) (*userv1.UpdateAgencyProfileResponse, error)
	CheckBusinessCapability(ctx context.Context, req *userv1.CheckBusinessCapabilityRequest) (*userv1.CheckBusinessCapabilityResponse, error)
	GetRoleScopePolicy(ctx context.Context, req *userv1.GetRoleScopePolicyRequest) (*userv1.GetRoleScopePolicyResponse, error)
	GetAgencyMembers(ctx context.Context, req *userv1.GetAgencyMembersRequest) (*userv1.GetAgencyMembersResponse, error)
	GetAgencyApplications(ctx context.Context, req *userv1.GetAgencyApplicationsRequest) (*userv1.GetAgencyApplicationsResponse, error)
	ReviewAgencyApplication(ctx context.Context, req *userv1.ReviewAgencyApplicationRequest) (*userv1.ReviewAgencyApplicationResponse, error)
	KickAgencyHost(ctx context.Context, req *userv1.KickAgencyHostRequest) (*userv1.KickAgencyHostResponse, error)
}

// UserHostAdminClient 抽象 gateway 对 user-service host admin domain 写入口的依赖。
type UserHostAdminClient interface {
	CreateBDLeader(ctx context.Context, req *userv1.CreateBDLeaderRequest) (*userv1.CreateBDLeaderResponse, error)
}

// AppRegistryClient 抽象 gateway 对 user-service App 注册表的解析依赖。
type AppRegistryClient interface {
	ResolveApp(ctx context.Context, req *userv1.ResolveAppRequest) (*userv1.ResolveAppResponse, error)
}

type grpcUserAuthClient struct {
	client userv1.AuthServiceClient
}

type grpcUserIdentityClient struct {
	client userv1.UserIdentityServiceClient
}

type grpcUserProfileClient struct {
	client userv1.UserServiceClient
}

var _ UserAvatarUploadClient = (*grpcUserProfileClient)(nil)

type grpcUserInviteClient struct {
	client userv1.UserServiceClient
}

type grpcUserSocialClient struct {
	client userv1.UserSocialServiceClient
}

type grpcUserCPClient struct {
	client userv1.UserCPServiceClient
}

var _ UserCPFormationGiftFeedClient = (*grpcUserCPClient)(nil)

type grpcUserDeviceClient struct {
	client userv1.UserDeviceServiceClient
}

type grpcUserCountryQueryClient struct {
	client userv1.CountryQueryServiceClient
}

type grpcUserRegionClient struct {
	client userv1.RegionAdminServiceClient
}

type grpcUserHostClient struct {
	client userv1.UserHostServiceClient
}

type grpcUserHostAdminClient struct {
	client userv1.UserHostAdminServiceClient
}

type grpcAppRegistryClient struct {
	client userv1.AppRegistryServiceClient
}

// NewGRPCUserAuthClient 用 gRPC 连接构造 user-service auth client。
func NewGRPCUserAuthClient(conn *grpc.ClientConn) UserAuthClient {
	return &grpcUserAuthClient{
		client: userv1.NewAuthServiceClient(conn),
	}
}

// NewGRPCUserIdentityClient 用 gRPC 连接构造 user-service 短号 client。
func NewGRPCUserIdentityClient(conn *grpc.ClientConn) UserIdentityClient {
	return &grpcUserIdentityClient{
		client: userv1.NewUserIdentityServiceClient(conn),
	}
}

// NewGRPCUserProfileClient 用 gRPC 连接构造 user-service 资料 client。
func NewGRPCUserProfileClient(conn *grpc.ClientConn) UserProfileClient {
	return &grpcUserProfileClient{
		client: userv1.NewUserServiceClient(conn),
	}
}

// NewGRPCUserInviteClient 用 gRPC 连接构造 H5 邀请页专用 client。
func NewGRPCUserInviteClient(conn *grpc.ClientConn) UserInviteClient {
	return &grpcUserInviteClient{
		client: userv1.NewUserServiceClient(conn),
	}
}

// NewGRPCUserSocialClient 用 gRPC 连接构造 user-service social client。
func NewGRPCUserSocialClient(conn *grpc.ClientConn) UserSocialClient {
	return &grpcUserSocialClient{
		client: userv1.NewUserSocialServiceClient(conn),
	}
}

// NewGRPCUserCPClient 用 gRPC 连接构造 CP 关系 client。
func NewGRPCUserCPClient(conn *grpc.ClientConn) UserCPClient {
	return &grpcUserCPClient{
		client: userv1.NewUserCPServiceClient(conn),
	}
}

// NewGRPCUserDeviceClient 用 gRPC 连接构造 user-service 设备推送 client。
func NewGRPCUserDeviceClient(conn *grpc.ClientConn) UserDeviceClient {
	return &grpcUserDeviceClient{
		client: userv1.NewUserDeviceServiceClient(conn),
	}
}

// NewGRPCUserCountryQueryClient 用 gRPC 连接构造国家公开查询 client。
func NewGRPCUserCountryQueryClient(conn *grpc.ClientConn) UserCountryQueryClient {
	return &grpcUserCountryQueryClient{
		client: userv1.NewCountryQueryServiceClient(conn),
	}
}

// NewGRPCUserRegionClient 用 gRPC 连接构造 user-service 区域查询 client。
func NewGRPCUserRegionClient(conn *grpc.ClientConn) UserRegionClient {
	return &grpcUserRegionClient{
		client: userv1.NewRegionAdminServiceClient(conn),
	}
}

// NewGRPCUserHostClient 用 gRPC 连接构造 user-service host domain client。
func NewGRPCUserHostClient(conn *grpc.ClientConn) UserHostClient {
	return &grpcUserHostClient{
		client: userv1.NewUserHostServiceClient(conn),
	}
}

// NewGRPCUserHostAdminClient 用 gRPC 连接构造 user-service host admin domain client。
func NewGRPCUserHostAdminClient(conn *grpc.ClientConn) UserHostAdminClient {
	return &grpcUserHostAdminClient{
		client: userv1.NewUserHostAdminServiceClient(conn),
	}
}

// NewGRPCAppRegistryClient 用 gRPC 连接构造 App 注册表 client。
func NewGRPCAppRegistryClient(conn *grpc.ClientConn) AppRegistryClient {
	return &grpcAppRegistryClient{
		client: userv1.NewAppRegistryServiceClient(conn),
	}
}

func (c *grpcUserAuthClient) LoginPassword(ctx context.Context, req *userv1.LoginPasswordRequest) (*userv1.AuthResponse, error) {
	return c.client.LoginPassword(ctx, req)
}

func (c *grpcUserAuthClient) LoginThirdParty(ctx context.Context, req *userv1.LoginThirdPartyRequest) (*userv1.AuthResponse, error) {
	return c.client.LoginThirdParty(ctx, req)
}

func (c *grpcUserAuthClient) RegisterThirdParty(ctx context.Context, req *userv1.RegisterThirdPartyRequest) (*userv1.AuthResponse, error) {
	return c.client.RegisterThirdParty(ctx, req)
}

func (c *grpcUserAuthClient) CheckThirdPartyRegistered(ctx context.Context, req *userv1.CheckThirdPartyRegisteredRequest) (*userv1.CheckThirdPartyRegisteredResponse, error) {
	return c.client.CheckThirdPartyRegistered(ctx, req)
}

func (c *grpcUserAuthClient) SetPassword(ctx context.Context, req *userv1.SetPasswordRequest) (*userv1.SetPasswordResponse, error) {
	return c.client.SetPassword(ctx, req)
}

func (c *grpcUserAuthClient) QuickCreateAccount(ctx context.Context, req *userv1.QuickCreateAccountRequest) (*userv1.QuickCreateAccountResponse, error) {
	return c.client.QuickCreateAccount(ctx, req)
}

func (c *grpcUserAuthClient) RefreshToken(ctx context.Context, req *userv1.RefreshTokenRequest) (*userv1.RefreshTokenResponse, error) {
	return c.client.RefreshToken(ctx, req)
}

func (c *grpcUserAuthClient) Logout(ctx context.Context, req *userv1.LogoutRequest) (*userv1.LogoutResponse, error) {
	return c.client.Logout(ctx, req)
}

func (c *grpcUserAuthClient) RecordLoginBlocked(ctx context.Context, req *userv1.RecordLoginBlockedRequest) (*userv1.RecordLoginBlockedResponse, error) {
	return c.client.RecordLoginBlocked(ctx, req)
}

func (c *grpcUserAuthClient) CheckLoginRiskIPWhitelist(ctx context.Context, req *userv1.CheckLoginRiskIPWhitelistRequest) (*userv1.CheckLoginRiskIPWhitelistResponse, error) {
	return c.client.CheckLoginRiskIPWhitelist(ctx, req)
}

func (c *grpcUserAuthClient) AppHeartbeat(ctx context.Context, req *userv1.AppHeartbeatRequest) (*userv1.AppHeartbeatResponse, error) {
	return c.client.AppHeartbeat(ctx, req)
}

func (c *grpcUserIdentityClient) GetUserIdentity(ctx context.Context, req *userv1.GetUserIdentityRequest) (*userv1.GetUserIdentityResponse, error) {
	return c.client.GetUserIdentity(ctx, req)
}

func (c *grpcUserIdentityClient) ResolveDisplayUserID(ctx context.Context, req *userv1.ResolveDisplayUserIDRequest) (*userv1.ResolveDisplayUserIDResponse, error) {
	return c.client.ResolveDisplayUserID(ctx, req)
}

func (c *grpcUserIdentityClient) ChangeDisplayUserID(ctx context.Context, req *userv1.ChangeDisplayUserIDRequest) (*userv1.ChangeDisplayUserIDResponse, error) {
	return c.client.ChangeDisplayUserID(ctx, req)
}

func (c *grpcUserIdentityClient) ApplyPrettyDisplayUserID(ctx context.Context, req *userv1.ApplyPrettyDisplayUserIDRequest) (*userv1.ApplyPrettyDisplayUserIDResponse, error) {
	return c.client.ApplyPrettyDisplayUserID(ctx, req)
}

func (c *grpcUserIdentityClient) ListAvailablePrettyDisplayIDs(ctx context.Context, req *userv1.ListAvailablePrettyDisplayIDsRequest) (*userv1.ListAvailablePrettyDisplayIDsResponse, error) {
	return c.client.ListAvailablePrettyDisplayIDs(ctx, req)
}

func (c *grpcUserIdentityClient) ApplyPrettyDisplayIDFromPool(ctx context.Context, req *userv1.ApplyPrettyDisplayIDFromPoolRequest) (*userv1.ApplyPrettyDisplayIDFromPoolResponse, error) {
	return c.client.ApplyPrettyDisplayIDFromPool(ctx, req)
}

func (c *grpcUserProfileClient) GetUser(ctx context.Context, req *userv1.GetUserRequest) (*userv1.GetUserResponse, error) {
	return c.client.GetUser(ctx, req)
}

func (c *grpcUserProfileClient) BusinessUserLookup(ctx context.Context, req *userv1.BusinessUserLookupRequest) (*userv1.BusinessUserLookupResponse, error) {
	return c.client.BusinessUserLookup(ctx, req)
}

func (c *grpcUserProfileClient) GetMyProfileStats(ctx context.Context, req *userv1.GetMyProfileStatsRequest) (*userv1.GetMyProfileStatsResponse, error) {
	return c.client.GetMyProfileStats(ctx, req)
}

func (c *grpcUserProfileClient) BatchGetUsers(ctx context.Context, req *userv1.BatchGetUsersRequest) (*userv1.BatchGetUsersResponse, error) {
	return c.client.BatchGetUsers(ctx, req)
}

func (c *grpcUserProfileClient) BatchGetRoomBasicUsers(ctx context.Context, req *userv1.BatchGetRoomBasicUsersRequest) (*userv1.BatchGetRoomBasicUsersResponse, error) {
	return c.client.BatchGetRoomBasicUsers(ctx, req)
}

func (c *grpcUserProfileClient) CompleteOnboarding(ctx context.Context, req *userv1.CompleteOnboardingRequest) (*userv1.CompleteOnboardingResponse, error) {
	return c.client.CompleteOnboarding(ctx, req)
}

func (c *grpcUserProfileClient) AuthorizeUserAvatarUpload(ctx context.Context, req *userv1.AuthorizeUserAvatarUploadRequest) (*userv1.AuthorizeUserAvatarUploadResponse, error) {
	return c.client.AuthorizeUserAvatarUpload(ctx, req)
}

func (c *grpcUserProfileClient) CompleteUserAvatarUpload(ctx context.Context, req *userv1.CompleteUserAvatarUploadRequest) (*userv1.CompleteUserAvatarUploadResponse, error) {
	return c.client.CompleteUserAvatarUpload(ctx, req)
}

func (c *grpcUserProfileClient) UpdateUserProfile(ctx context.Context, req *userv1.UpdateUserProfileRequest) (*userv1.UpdateUserProfileResponse, error) {
	return c.client.UpdateUserProfile(ctx, req)
}

func (c *grpcUserProfileClient) UpdateUserProfileBackground(ctx context.Context, req *userv1.UpdateUserProfileBackgroundRequest) (*userv1.UpdateUserProfileBackgroundResponse, error) {
	return c.client.UpdateUserProfileBackground(ctx, req)
}

func (c *grpcUserProfileClient) UpdateUserContactInfo(ctx context.Context, req *userv1.UpdateUserContactInfoRequest) (*userv1.UpdateUserContactInfoResponse, error) {
	return c.client.UpdateUserContactInfo(ctx, req)
}

func (c *grpcUserProfileClient) UpdateUserWithdrawAddress(ctx context.Context, req *userv1.UpdateUserWithdrawAddressRequest) (*userv1.UpdateUserWithdrawAddressResponse, error) {
	return c.client.UpdateUserWithdrawAddress(ctx, req)
}

func (c *grpcUserProfileClient) ChangeUserCountry(ctx context.Context, req *userv1.ChangeUserCountryRequest) (*userv1.ChangeUserCountryResponse, error) {
	return c.client.ChangeUserCountry(ctx, req)
}

func (c *grpcUserProfileClient) AdminChangeUserCountry(ctx context.Context, req *userv1.AdminChangeUserCountryRequest) (*userv1.ChangeUserCountryResponse, error) {
	return c.client.AdminChangeUserCountry(ctx, req)
}

func (c *grpcUserProfileClient) CreateManagerUserBlock(ctx context.Context, req *userv1.CreateManagerUserBlockRequest) (*userv1.CreateManagerUserBlockResponse, error) {
	return c.client.CreateManagerUserBlock(ctx, req)
}

func (c *grpcUserProfileClient) ListManagerUserBlocks(ctx context.Context, req *userv1.ListManagerUserBlocksRequest) (*userv1.ListManagerUserBlocksResponse, error) {
	return c.client.ListManagerUserBlocks(ctx, req)
}

func (c *grpcUserProfileClient) UnblockManagerUser(ctx context.Context, req *userv1.UnblockManagerUserRequest) (*userv1.UnblockManagerUserResponse, error) {
	return c.client.UnblockManagerUser(ctx, req)
}

func (c *grpcUserInviteClient) SearchInviteReferrer(ctx context.Context, req *userv1.SearchInviteReferrerRequest) (*userv1.SearchInviteReferrerResponse, error) {
	return c.client.SearchInviteReferrer(ctx, req)
}

func (c *grpcUserInviteClient) GetInviteAttribution(ctx context.Context, req *userv1.GetInviteAttributionRequest) (*userv1.GetInviteAttributionResponse, error) {
	return c.client.GetInviteAttribution(ctx, req)
}

func (c *grpcUserInviteClient) BindInviteReferrer(ctx context.Context, req *userv1.BindInviteReferrerRequest) (*userv1.BindInviteReferrerResponse, error) {
	return c.client.BindInviteReferrer(ctx, req)
}

func (c *grpcUserSocialClient) RecordProfileVisit(ctx context.Context, req *userv1.RecordProfileVisitRequest) (*userv1.RecordProfileVisitResponse, error) {
	return c.client.RecordProfileVisit(ctx, req)
}

func (c *grpcUserSocialClient) ListProfileVisitors(ctx context.Context, req *userv1.ListProfileVisitorsRequest) (*userv1.ListProfileVisitorsResponse, error) {
	return c.client.ListProfileVisitors(ctx, req)
}

func (c *grpcUserSocialClient) FollowUser(ctx context.Context, req *userv1.FollowUserRequest) (*userv1.FollowUserResponse, error) {
	return c.client.FollowUser(ctx, req)
}

func (c *grpcUserSocialClient) UnfollowUser(ctx context.Context, req *userv1.UnfollowUserRequest) (*userv1.UnfollowUserResponse, error) {
	return c.client.UnfollowUser(ctx, req)
}

func (c *grpcUserSocialClient) ListFollowing(ctx context.Context, req *userv1.ListFollowingRequest) (*userv1.ListFollowingResponse, error) {
	return c.client.ListFollowing(ctx, req)
}

func (c *grpcUserSocialClient) ApplyFriend(ctx context.Context, req *userv1.ApplyFriendRequest) (*userv1.ApplyFriendResponse, error) {
	return c.client.ApplyFriend(ctx, req)
}

func (c *grpcUserSocialClient) AcceptFriendApplication(ctx context.Context, req *userv1.AcceptFriendApplicationRequest) (*userv1.AcceptFriendApplicationResponse, error) {
	return c.client.AcceptFriendApplication(ctx, req)
}

func (c *grpcUserSocialClient) DeleteFriend(ctx context.Context, req *userv1.DeleteFriendRequest) (*userv1.DeleteFriendResponse, error) {
	return c.client.DeleteFriend(ctx, req)
}

func (c *grpcUserSocialClient) ListFriends(ctx context.Context, req *userv1.ListFriendsRequest) (*userv1.ListFriendsResponse, error) {
	return c.client.ListFriends(ctx, req)
}

func (c *grpcUserSocialClient) ListFriendApplications(ctx context.Context, req *userv1.ListFriendApplicationsRequest) (*userv1.ListFriendApplicationsResponse, error) {
	return c.client.ListFriendApplications(ctx, req)
}

func (c *grpcUserSocialClient) SubmitReport(ctx context.Context, req *userv1.SubmitReportRequest) (*userv1.SubmitReportResponse, error) {
	return c.client.SubmitReport(ctx, req)
}

func (c *grpcUserCPClient) ListCPApplications(ctx context.Context, req *userv1.ListCPApplicationsRequest) (*userv1.ListCPApplicationsResponse, error) {
	return c.client.ListCPApplications(ctx, req)
}

func (c *grpcUserCPClient) AcceptCPApplication(ctx context.Context, req *userv1.AcceptCPApplicationRequest) (*userv1.AcceptCPApplicationResponse, error) {
	return c.client.AcceptCPApplication(ctx, req)
}

func (c *grpcUserCPClient) RejectCPApplication(ctx context.Context, req *userv1.RejectCPApplicationRequest) (*userv1.RejectCPApplicationResponse, error) {
	return c.client.RejectCPApplication(ctx, req)
}

func (c *grpcUserCPClient) ListCPRelationships(ctx context.Context, req *userv1.ListCPRelationshipsRequest) (*userv1.ListCPRelationshipsResponse, error) {
	return c.client.ListCPRelationships(ctx, req)
}

func (c *grpcUserCPClient) ListCPIntimacyLeaderboard(ctx context.Context, req *userv1.ListCPIntimacyLeaderboardRequest) (*userv1.ListCPIntimacyLeaderboardResponse, error) {
	return c.client.ListCPIntimacyLeaderboard(ctx, req)
}

func (c *grpcUserCPClient) ListCPFormationGiftFeed(ctx context.Context, req *userv1.ListCPFormationGiftFeedRequest) (*userv1.ListCPFormationGiftFeedResponse, error) {
	return c.client.ListCPFormationGiftFeed(ctx, req)
}

func (c *grpcUserCPClient) PrepareBreakCPRelationship(ctx context.Context, req *userv1.PrepareBreakCPRelationshipRequest) (*userv1.PrepareBreakCPRelationshipResponse, error) {
	return c.client.PrepareBreakCPRelationship(ctx, req)
}

func (c *grpcUserCPClient) ConfirmBreakCPRelationship(ctx context.Context, req *userv1.ConfirmBreakCPRelationshipRequest) (*userv1.ConfirmBreakCPRelationshipResponse, error) {
	return c.client.ConfirmBreakCPRelationship(ctx, req)
}

func (c *grpcUserCPClient) CancelBreakCPRelationship(ctx context.Context, req *userv1.CancelBreakCPRelationshipRequest) (*userv1.CancelBreakCPRelationshipResponse, error) {
	return c.client.CancelBreakCPRelationship(ctx, req)
}

func (c *grpcUserDeviceClient) BindPushToken(ctx context.Context, req *userv1.BindPushTokenRequest) (*userv1.BindPushTokenResponse, error) {
	return c.client.BindPushToken(ctx, req)
}

func (c *grpcUserDeviceClient) DeletePushToken(ctx context.Context, req *userv1.DeletePushTokenRequest) (*userv1.DeletePushTokenResponse, error) {
	return c.client.DeletePushToken(ctx, req)
}

func (c *grpcUserCountryQueryClient) ListRegistrationCountries(ctx context.Context, req *userv1.ListRegistrationCountriesRequest) (*userv1.ListRegistrationCountriesResponse, error) {
	return c.client.ListRegistrationCountries(ctx, req)
}

func (c *grpcUserCountryQueryClient) ListLoginRiskBlockedCountries(ctx context.Context, req *userv1.ListLoginRiskBlockedCountriesRequest) (*userv1.ListLoginRiskBlockedCountriesResponse, error) {
	return c.client.ListLoginRiskBlockedCountries(ctx, req)
}

func (c *grpcUserRegionClient) ListRegions(ctx context.Context, req *userv1.ListRegionsRequest) (*userv1.ListRegionsResponse, error) {
	return c.client.ListRegions(ctx, req)
}

func (c *grpcUserRegionClient) GetRegion(ctx context.Context, req *userv1.GetRegionRequest) (*userv1.RegionResponse, error) {
	return c.client.GetRegion(ctx, req)
}

func (c *grpcUserHostClient) SearchAgencies(ctx context.Context, req *userv1.SearchAgenciesRequest) (*userv1.SearchAgenciesResponse, error) {
	return c.client.SearchAgencies(ctx, req)
}

func (c *grpcUserHostClient) ApplyToAgency(ctx context.Context, req *userv1.ApplyToAgencyRequest) (*userv1.ApplyToAgencyResponse, error) {
	return c.client.ApplyToAgency(ctx, req)
}

func (c *grpcUserHostClient) InviteAgency(ctx context.Context, req *userv1.InviteAgencyRequest) (*userv1.InviteAgencyResponse, error) {
	return c.client.InviteAgency(ctx, req)
}

func (c *grpcUserHostClient) InviteBD(ctx context.Context, req *userv1.InviteBDRequest) (*userv1.InviteBDResponse, error) {
	return c.client.InviteBD(ctx, req)
}

func (c *grpcUserHostClient) InviteHost(ctx context.Context, req *userv1.InviteHostRequest) (*userv1.InviteHostResponse, error) {
	return c.client.InviteHost(ctx, req)
}

func (c *grpcUserHostClient) ListBDLeaderBDs(ctx context.Context, req *userv1.ListBDLeaderBDsRequest) (*userv1.ListBDLeaderBDsResponse, error) {
	return c.client.ListBDLeaderBDs(ctx, req)
}

func (c *grpcUserHostClient) ListBDLeaderAgencies(ctx context.Context, req *userv1.ListBDLeaderAgenciesRequest) (*userv1.ListBDLeaderAgenciesResponse, error) {
	return c.client.ListBDLeaderAgencies(ctx, req)
}

func (c *grpcUserHostClient) ListBDAgencies(ctx context.Context, req *userv1.ListBDAgenciesRequest) (*userv1.ListBDAgenciesResponse, error) {
	return c.client.ListBDAgencies(ctx, req)
}

func (c *grpcUserHostClient) ListManagerTeamAgencies(ctx context.Context, req *userv1.ListManagerTeamAgenciesRequest) (*userv1.ListManagerTeamAgenciesResponse, error) {
	return c.client.ListManagerTeamAgencies(ctx, req)
}

func (c *grpcUserHostClient) ListRoleInvitations(ctx context.Context, req *userv1.ListRoleInvitationsRequest) (*userv1.ListRoleInvitationsResponse, error) {
	return c.client.ListRoleInvitations(ctx, req)
}

func (c *grpcUserHostClient) ProcessRoleInvitation(ctx context.Context, req *userv1.ProcessRoleInvitationRequest) (*userv1.ProcessRoleInvitationResponse, error) {
	return c.client.ProcessRoleInvitation(ctx, req)
}

func (c *grpcUserHostClient) GetHostProfile(ctx context.Context, req *userv1.GetHostProfileRequest) (*userv1.GetHostProfileResponse, error) {
	return c.client.GetHostProfile(ctx, req)
}

func (c *grpcUserHostClient) BatchGetHostProfiles(ctx context.Context, req *userv1.BatchGetHostProfilesRequest) (*userv1.BatchGetHostProfilesResponse, error) {
	return c.client.BatchGetHostProfiles(ctx, req)
}

func (c *grpcUserHostClient) GetBDProfile(ctx context.Context, req *userv1.GetBDProfileRequest) (*userv1.GetBDProfileResponse, error) {
	return c.client.GetBDProfile(ctx, req)
}

func (c *grpcUserHostClient) GetCoinSellerProfile(ctx context.Context, req *userv1.GetCoinSellerProfileRequest) (*userv1.GetCoinSellerProfileResponse, error) {
	return c.client.GetCoinSellerProfile(ctx, req)
}

func (c *grpcUserHostClient) ListActiveCoinSellersInMyRegion(ctx context.Context, req *userv1.ListActiveCoinSellersInMyRegionRequest) (*userv1.ListActiveCoinSellersInMyRegionResponse, error) {
	return c.client.ListActiveCoinSellersInMyRegion(ctx, req)
}

func (c *grpcUserHostClient) CreateSubCoinSeller(ctx context.Context, req *userv1.CreateSubCoinSellerRequest) (*userv1.CreateSubCoinSellerResponse, error) {
	return c.client.CreateSubCoinSeller(ctx, req)
}

func (c *grpcUserHostClient) SubmitSubCoinSellerApplication(ctx context.Context, req *userv1.SubmitSubCoinSellerApplicationRequest) (*userv1.SubmitSubCoinSellerApplicationResponse, error) {
	return c.client.SubmitSubCoinSellerApplication(ctx, req)
}

func (c *grpcUserHostClient) ListSubCoinSellers(ctx context.Context, req *userv1.ListSubCoinSellersRequest) (*userv1.ListSubCoinSellersResponse, error) {
	return c.client.ListSubCoinSellers(ctx, req)
}

func (c *grpcUserHostClient) CheckCoinSellerSubRelation(ctx context.Context, req *userv1.CheckCoinSellerSubRelationRequest) (*userv1.CheckCoinSellerSubRelationResponse, error) {
	return c.client.CheckCoinSellerSubRelation(ctx, req)
}

func (c *grpcUserHostClient) GetUserRoleSummary(ctx context.Context, req *userv1.GetUserRoleSummaryRequest) (*userv1.GetUserRoleSummaryResponse, error) {
	return c.client.GetUserRoleSummary(ctx, req)
}

func (c *grpcUserHostClient) GetAgency(ctx context.Context, req *userv1.GetAgencyRequest) (*userv1.GetAgencyResponse, error) {
	return c.client.GetAgency(ctx, req)
}

func (c *grpcUserHostClient) UpdateAgencyProfile(ctx context.Context, req *userv1.UpdateAgencyProfileRequest) (*userv1.UpdateAgencyProfileResponse, error) {
	return c.client.UpdateAgencyProfile(ctx, req)
}

func (c *grpcUserHostClient) CheckBusinessCapability(ctx context.Context, req *userv1.CheckBusinessCapabilityRequest) (*userv1.CheckBusinessCapabilityResponse, error) {
	return c.client.CheckBusinessCapability(ctx, req)
}

func (c *grpcUserHostClient) GetRoleScopePolicy(ctx context.Context, req *userv1.GetRoleScopePolicyRequest) (*userv1.GetRoleScopePolicyResponse, error) {
	return c.client.GetRoleScopePolicy(ctx, req)
}

func (c *grpcUserHostClient) GetAgencyMembers(ctx context.Context, req *userv1.GetAgencyMembersRequest) (*userv1.GetAgencyMembersResponse, error) {
	return c.client.GetAgencyMembers(ctx, req)
}

func (c *grpcUserHostClient) GetAgencyApplications(ctx context.Context, req *userv1.GetAgencyApplicationsRequest) (*userv1.GetAgencyApplicationsResponse, error) {
	return c.client.GetAgencyApplications(ctx, req)
}

func (c *grpcUserHostClient) ReviewAgencyApplication(ctx context.Context, req *userv1.ReviewAgencyApplicationRequest) (*userv1.ReviewAgencyApplicationResponse, error) {
	return c.client.ReviewAgencyApplication(ctx, req)
}

func (c *grpcUserHostClient) KickAgencyHost(ctx context.Context, req *userv1.KickAgencyHostRequest) (*userv1.KickAgencyHostResponse, error) {
	return c.client.KickAgencyHost(ctx, req)
}

func (c *grpcUserHostClient) GetHostEngagementStats(ctx context.Context, req *userv1.GetHostEngagementStatsRequest) (*userv1.GetHostEngagementStatsResponse, error) {
	return c.client.GetHostEngagementStats(ctx, req)
}

func (c *grpcUserHostClient) RecordPrivateMessageEvent(ctx context.Context, req *userv1.RecordPrivateMessageEventRequest) (*userv1.RecordPrivateMessageEventResponse, error) {
	return c.client.RecordPrivateMessageEvent(ctx, req)
}

func (c *grpcUserHostAdminClient) CreateBDLeader(ctx context.Context, req *userv1.CreateBDLeaderRequest) (*userv1.CreateBDLeaderResponse, error) {
	return c.client.CreateBDLeader(ctx, req)
}

func (c *grpcAppRegistryClient) ResolveApp(ctx context.Context, req *userv1.ResolveAppRequest) (*userv1.ResolveAppResponse, error) {
	return c.client.ResolveApp(ctx, req)
}
