package testkits

import (
	"context"

	"github.com/aws/aws-sdk-go-v2/aws"
	"github.com/aws/aws-sdk-go-v2/service/ec2"
	elbv2 "github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2"
	tagging "github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi"
	"github.com/aws/aws-sdk-go-v2/service/support"

	awsclient "github.com/tidbcloud/observability/agent-control-server/pkg/cloud/aws"
)

type AwsClient struct {
	serverURL string
}

func NewAwsClient(serverURL string) *AwsClient {
	return &AwsClient{serverURL: serverURL}
}

func (m *AwsClient) EC2(ar *awsclient.AssumedRole, opts ...awsclient.Option) *ec2.Client {
	cfg := aws.Config{
		Region: "us-east-1",
		EndpointResolverWithOptions: aws.EndpointResolverWithOptionsFunc(func(service, region string, options ...any) (aws.Endpoint, error) {
			return aws.Endpoint{
				URL: m.serverURL,
			}, nil
		}),
		Credentials: aws.NewCredentialsCache(aws.CredentialsProviderFunc(func(ctx context.Context) (aws.Credentials, error) {
			return aws.Credentials{
				AccessKeyID:     "fake-ak",
				SecretAccessKey: "fake-sak",
				SessionToken:    "fake-st",
			}, nil
		})),
		Retryer: func() aws.Retryer { return aws.NopRetryer{} },
	}
	return ec2.NewFromConfig(cfg)
}

func (m *AwsClient) ELBV2(ar *awsclient.AssumedRole, opts ...awsclient.Option) *elbv2.Client {
	return nil
}

func (m *AwsClient) ResourceGroupsTagging(ar *awsclient.AssumedRole, opts ...awsclient.Option) *tagging.Client {
	return nil
}

func (m *AwsClient) Support(ar *awsclient.AssumedRole, opts ...awsclient.Option) *support.Client {
	return nil
}
