// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
using System.Collections.Generic;
using System.Threading.Tasks;
using Amazon.AppRunner.Model;
using Amazon.CloudFormation.Model;
using Amazon.CloudFront.Model;
using Amazon.CloudWatchEvents.Model;
using Amazon.EC2.Model;
using Amazon.ECR.Model;
using Amazon.ECS.Model;
using Amazon.ElasticBeanstalk.Model;
using Amazon.ElasticLoadBalancingV2;
using Amazon.IdentityManagement.Model;
using Amazon.S3.Model;
using Amazon.SecurityToken.Model;
using LoadBalancer = Amazon.ElasticLoadBalancingV2.Model.LoadBalancer;
using Listener = Amazon.ElasticLoadBalancingV2.Model.Listener;
using Amazon.CloudControlApi.Model;
namespace AWS.Deploy.Common.Data
{
///
/// Enum for filtering the type of Elastic Beanstalk platform to deploy to.
///
public enum BeanstalkPlatformType { Linux, Windows }
///
/// Retrieves AWS resources
///
///
/// This is meant to be a lightweight wrapper around the SDK,
/// business logic should generally be implemented in the caller.
///
public interface IAWSResourceQueryer
{
Task GetDefaultVpc();
Task GetCloudControlApiResource(string type, string identifier);
Task> GetCloudFormationStackEvents(string stackName);
///
/// Lists all of the EC2 instance types available in the deployment region without any filtering
///
/// List of
Task> ListOfAvailableInstanceTypes();
///
/// Describes a single EC2 instance type
///
/// Instance type (for example, "t2.micro")
/// The first if the specified type exists
Task DescribeInstanceType(string instanceType);
Task DescribeAppRunnerService(string serviceArn);
Task> DescribeCloudFormationResources(string stackName);
Task DescribeElasticBeanstalkEnvironment(string environmentName);
Task DescribeElasticLoadBalancer(string loadBalancerArn);
Task> DescribeElasticLoadBalancerListeners(string loadBalancerArn);
Task DescribeCloudWatchRule(string ruleName);
Task GetS3BucketLocation(string bucketName);
Task GetS3BucketWebSiteConfiguration(string bucketName);
Task> ListOfECSClusters(string? ecsClusterName = null);
Task> ListOfElasticBeanstalkApplications(string? applicationName = null);
Task> ListOfElasticBeanstalkEnvironments(string? applicationName = null, string? environmentName = null);
Task> ListElasticBeanstalkResourceTags(string resourceArn);
Task> ListOfEC2KeyPairs();
Task CreateEC2KeyPair(string keyName, string saveLocation);
Task> ListOfIAMRoles(string? servicePrincipal);
Task> GetListOfVpcs();
Task> GetElasticBeanstalkPlatformArns(params BeanstalkPlatformType[]? platformTypes);
Task GetLatestElasticBeanstalkPlatformArn(BeanstalkPlatformType platformType);
Task> GetECRAuthorizationToken();
Task> GetECRRepositories(List? repositoryNames = null);
Task CreateECRRepository(string repositoryName);
Task> GetCloudFormationStacks();
Task GetCloudFormationStack(string stackName);
Task GetCallerIdentity(string awsRegion);
Task> ListOfLoadBalancers(LoadBalancerTypeEnum loadBalancerType);
Task GetCloudFrontDistribution(string distributionId);
Task> ListOfDyanmoDBTables();
Task> ListOfSQSQueuesUrls();
Task> ListOfSNSTopicArns();
Task> ListOfS3Buckets();
Task> GetBeanstalkEnvironmentConfigurationSettings(string environmentName);
Task DescribeECRRepository(string respositoryName);
Task> DescribeAppRunnerVpcConnectors();
Task> DescribeSubnets(string? vpcID = null);
Task> DescribeSecurityGroups(string? vpcID = null);
Task GetParameterStoreTextValue(string parameterName);
}
}