package account

import (
	"context"

	"github.com/tidbcloud/account/idl/pbgen/proto/account"
	"github.com/tidbcloud/account/idl/pbgen/proto/acl"

	"github.com/tidbcloud/tidb-management-service/utilities/bizerr"
)

//go:generate go run go.uber.org/mock/mockgen@latest -source=$GOFILE -package=mock_$GOPACKAGE -destination=./mock_$GOPACKAGE/mock_$GOFILE
type Client interface {
	GetOrCreateSystemUser(ctx context.Context, orgID uint64) (*account.User, bizerr.BizError)
	GetOpenAPIAccess(ctx context.Context, publicKey string) (*acl.GetOpenAPIAccessResp, bizerr.BizError)
	GetProjectByID(ctx context.Context, id uint64) (*account.Project, bizerr.BizError)
	GetOrgByID(ctx context.Context, id uint64) (*account.Org, bizerr.BizError)
	ListOrgsByUser(ctx context.Context, userID uint64) ([]*account.Org, bizerr.BizError)
	ListProjectsByOrgsInUser(ctx context.Context, userID, orgID uint64) ([]*account.Project, bizerr.BizError)
	ListProjects(ctx context.Context, ids []uint64) ([]*account.Project, bizerr.BizError)
	GetApiKeyByAccessKey(ctx context.Context, accessKey string) (*account.GetApiKeyByAccessKeyRsp, bizerr.BizError)
	GetUserByEmail(ctx context.Context, email string) (*account.User, bizerr.BizError)

	GetAccountClient() account.AccountAPIServiceClient
}

// only for mock
//
//go:generate go run go.uber.org/mock/mockgen@latest -source=$GOFILE -package=mock_$GOPACKAGE -destination=./mock_$GOPACKAGE/mock_$GOFILE
type ApiCli interface {
	account.AccountAPIServiceClient
}
