package cmd

import (
	awssdk "github.com/aws/aws-sdk-go-v2/aws"
	"github.com/aws/aws-sdk-go-v2/service/ec2"
	"github.com/aws/aws-sdk-go-v2/service/ssm"
	"github.com/aws/aws-sdk-go-v2/service/sts"

	cpaws "github.com/tidbcloud/controlplane9/internal/aws"
	"github.com/tidbcloud/controlplane9/internal/host/remoteimage"
)

func newSTSFromConfig(cfg *awssdk.Config) cpaws.STSAPI {
	return sts.NewFromConfig(*cfg)
}

var (
	cmdLoadAWSConfig                        = cpaws.LoadAWSConfig
	cmdLoadAWSConfigFromExportedCredential  = cpaws.LoadAWSConfigFromExportedProfileCredentials
	cmdNewSTSClient                         = newSTSFromConfig
	cmdNewRemoteImageEC2Client              = func(cfg awssdk.Config) remoteimage.EC2API { return ec2.NewFromConfig(cfg) }
	cmdNewRemoteImageSSMClient              = func(cfg awssdk.Config) remoteimage.SSMAPI { return ssm.NewFromConfig(cfg) }
	cmdValidateIAM                          = cpaws.ValidateIAMReadiness
	cmdValidateIAMCleanup                   = cpaws.ValidateIAMCleanupReadinessFromConfig
	cmdValidateUserManagedEC2Key            = cpaws.ValidateUserManagedEC2Key
	cmdRunV1Alpha2SetupIAMPreflight         = runV1Alpha2SetupIAMPreflight
	cmdRunV1Alpha2SessionCollisionPreflight = runV1Alpha2SessionCollisionPreflight
	cmdResolveV1Alpha2RemoteImagePlan       = resolveV1Alpha2RemoteImagePlan
	cmdResolveOwnerID                       = cpaws.ResolveOwnerIdentity
	cmdNewTaggingClient                     = cpaws.NewTaggingClient
	cmdFindManagedScopes                    = cpaws.FindManagedScopes
	cmdNewAutoScalingClient                 = cpaws.NewAutoScalingClient
	cmdFindManagedASGScopes                 = cpaws.FindManagedASGScopes
	cmdNewInventoryEC2Client                = cpaws.NewInventoryEC2Client
	cmdNewInventoryEKSClient                = cpaws.NewInventoryEKSClient
	cmdInventoryVolumes                     = cpaws.InventoryVolumes
	cmdInventoryInstances                   = cpaws.InventoryInstances
	cmdInventorySecurityGroups              = cpaws.InventorySecurityGroups
	cmdInventoryEKS                         = cpaws.InventoryEKS
)
