package fake

import (
	gomock "github.com/golang/mock/gomock"

	"github.com/tidbcloud/infra-provider/pkg/providers/aws"
)

var _ aws.Client = &MockClient{}

type MockClient struct {
	*MockKmsClient
	*MockIAMClient
	*MockRoute53Client
	*MockElbClient
	*MockEc2Client
	*MockS3Client
	*MockStsClient
	*MockResourceGroupsTaggingAPIClient
	Ctrl *gomock.Controller
}

func (c *MockClient) AlterConfig(func(aws.Config) aws.Config) aws.Client {
	return c
}

func (c *MockClient) KMS() aws.KmsClient {
	return c.MockKmsClient
}

func (c *MockClient) IAM() aws.IAMClient {
	return c.MockIAMClient
}

func (c *MockClient) Route53() aws.Route53Client {
	return c.MockRoute53Client
}

func (c *MockClient) Elb() aws.ElbClient {
	return c.MockElbClient
}

func (c *MockClient) Ec2() aws.Ec2Client {
	return c.MockEc2Client
}

func (c *MockClient) S3() aws.S3Client {
	return c.MockS3Client
}

func (c *MockClient) Sts() aws.StsClient {
	return c.MockStsClient
}

func (c *MockClient) ResourceGroupsTaggingAPI() aws.ResourceGroupsTaggingAPIClient {
	return c.MockResourceGroupsTaggingAPIClient
}

func (c *MockClient) Reset(t gomock.TestReporter) {
	ctrl := gomock.NewController(t)
	c.Ctrl = ctrl
	c.MockKmsClient = NewMockKmsClient(ctrl)
	c.MockIAMClient = NewMockIAMClient(ctrl)
	c.MockRoute53Client = NewMockRoute53Client(ctrl)
	c.MockElbClient = NewMockElbClient(ctrl)
	c.MockEc2Client = NewMockEc2Client(ctrl)
	c.MockS3Client = NewMockS3Client(ctrl)
	c.MockStsClient = NewMockStsClient(ctrl)
	c.MockResourceGroupsTaggingAPIClient = NewMockResourceGroupsTaggingAPIClient(ctrl)
}

func NewMockClient(t gomock.TestReporter) *MockClient {
	m := &MockClient{}
	m.Reset(t)

	return m
}
