package alicloud

import (
	"context"

	privatelink20200415 "github.com/alibabacloud-go/privatelink-20200415/v5/client"
	ramclient "github.com/alibabacloud-go/ram-20150501/v2/client"
	stsclient "github.com/alibabacloud-go/sts-20150401/v2/client"
	util "github.com/alibabacloud-go/tea-utils/v2/service"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
)

type RAMClient interface {
	CreateRoleWithOptions(request *ramclient.CreateRoleRequest, runtime *util.RuntimeOptions) (*ramclient.CreateRoleResponse, error)

	GetRoleWithOptions(request *ramclient.GetRoleRequest, runtime *util.RuntimeOptions) (*ramclient.GetRoleResponse, error)
	ListPoliciesForRoleWithOptions(request *ramclient.ListPoliciesForRoleRequest, runtime *util.RuntimeOptions) (*ramclient.ListPoliciesForRoleResponse, error)

	CreatePolicyWithOptions(request *ramclient.CreatePolicyRequest, runtime *util.RuntimeOptions) (*ramclient.CreatePolicyResponse, error)
	GetPolicyWithOptions(request *ramclient.GetPolicyRequest, runtime *util.RuntimeOptions) (*ramclient.GetPolicyResponse, error)
	AttachPolicyToRoleWithOptions(request *ramclient.AttachPolicyToRoleRequest, runtime *util.RuntimeOptions) (*ramclient.AttachPolicyToRoleResponse, error)
	CreatePolicyVersionWithOptions(request *ramclient.CreatePolicyVersionRequest, runtime *util.RuntimeOptions) (*ramclient.CreatePolicyVersionResponse, error)
	DeletePolicyWithOptions(request *ramclient.DeletePolicyRequest, runtime *util.RuntimeOptions) (*ramclient.DeletePolicyResponse, error)
	DetachPolicyFromRoleWithOptions(request *ramclient.DetachPolicyFromRoleRequest, runtime *util.RuntimeOptions) (*ramclient.DetachPolicyFromRoleResponse, error)

	DeleteRoleWithOptions(request *ramclient.DeleteRoleRequest, runtime *util.RuntimeOptions) (*ramclient.DeleteRoleResponse, error)
	UpdateRoleWithOptions(request *ramclient.UpdateRoleRequest, runtime *util.RuntimeOptions) (*ramclient.UpdateRoleResponse, error)
}

type StsClient interface {
	AssumeRoleWithOptions(request *stsclient.AssumeRoleRequest, runtime *util.RuntimeOptions) (*stsclient.AssumeRoleResponse, error)
}

type aliEndpointServiceClient interface {
	GetVpcEndpointServiceAttribute(request *privatelink20200415.GetVpcEndpointServiceAttributeRequest) (_result *privatelink20200415.GetVpcEndpointServiceAttributeResponse, _err error)
	AddUserToVpcEndpointService(request *privatelink20200415.AddUserToVpcEndpointServiceRequest) (_result *privatelink20200415.AddUserToVpcEndpointServiceResponse, _err error)
	RemoveUserFromVpcEndpointService(request *privatelink20200415.RemoveUserFromVpcEndpointServiceRequest) (_result *privatelink20200415.RemoveUserFromVpcEndpointServiceResponse, _err error)
}
type OssClient interface {
	PutBucket(ctx context.Context, request *oss.PutBucketRequest, optFns ...func(*oss.Options)) (*oss.PutBucketResult, error)
	IsBucketExist(ctx context.Context, bucket string, optFns ...func(*oss.Options)) (bool, error)
	GetObject(ctx context.Context, request *oss.GetObjectRequest, optFns ...func(*oss.Options)) (*oss.GetObjectResult, error)
	PutObject(ctx context.Context, request *oss.PutObjectRequest, optFns ...func(*oss.Options)) (*oss.PutObjectResult, error)
	DeleteMultipleObjects(ctx context.Context, request *oss.DeleteMultipleObjectsRequest, optFns ...func(*oss.Options)) (*oss.DeleteMultipleObjectsResult, error)
	NewListObjectsV2Paginator(request *oss.ListObjectsV2Request, optFns ...func(*oss.PaginatorOptions)) *oss.ListObjectsV2Paginator
	PutBucketLifecycle(ctx context.Context, request *oss.PutBucketLifecycleRequest, optFns ...func(*oss.Options)) (*oss.PutBucketLifecycleResult, error)
	GetBucketLifecycle(ctx context.Context, request *oss.GetBucketLifecycleRequest, optFns ...func(*oss.Options)) (*oss.GetBucketLifecycleResult, error)
	DeleteBucketLifecycle(ctx context.Context, request *oss.DeleteBucketLifecycleRequest, optFns ...func(*oss.Options)) (*oss.DeleteBucketLifecycleResult, error)
}
