/*
This file is part of aws-access-graph.

aws-access-graph is free software: you can redistribute it and/or modify it under
the terms of the GNU Affero General Public License as published by the Free Software
Foundation, either version 3 of the License, or (at your option) any later version.

aws-access-graph is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
details.

You should have received a copy of the GNU Affero General Public License along with
aws-access-graph. If not, see <https://www.gnu.org/licenses/>.
*/

namespace AwsAccessGraph
{
    public static class Constants
    {
        public static readonly Dictionary<string, string> AwsServicePolicyNames = new()
        {
            { "a2c", "AWS App2Container" },
            { "a4b", "Alexa for Business" },
            { "access-analyzer", "IAM Access Analyzer" },
            { "account", "AWS Account Management" },
            { "acm-pca", "AWS Private Certificate Authority" },
            { "acm", "AWS Certificate Manager (ACM)" },
            { "activate", "AWS Activate" },
            { "airflow", "Amazon Managed Workflows for Apache Airflow" },
            { "amplify", "AWS Amplify" },
            { "amplifybackend", "AWS Amplify Admin" },
            { "amplifyuibuilder", "AWS Amplify UI Builder" },
            { "aoss", "Amazon OpenSearch Serverless" },
            { "apigateway", "Amazon API Gateway Management" },
            { "appconfig", "AWS AppConfig" },
            { "appflow", "Amazon AppFlow" },
            { "application-autoscaling", "AWS Auto Scaling" },
            { "application-cost-profiler", "AWS Application Cost Profiler" },
            { "applicationinsights", "Amazon CloudWatch Application Insights" },
            { "appmesh-preview", "AWS App Mesh Preview" },
            { "appmesh", "AWS App Mesh" },
            { "apprunner", "AWS App Runner" },
            { "appstream", "Amazon AppStream 2.0" },
            { "appsync", "AWS AppSync" },
            { "aps", "Amazon Managed Service for Prometheus" },
            { "arc-zonal-shift", "Amazon Route 53 Application Recovery Controller - Zonal Shift" },
            { "arsenal", "Application Discovery Arsenal" },
            { "artifact", "AWS Artifact" },
            { "athena", "Amazon Athena" },
            { "auditmanager", "AWS Audit Manager" },
            { "autoscaling-plans", "AWS Auto Scaling (Plans)" },
            { "autoscaling", "Amazon EC2 Auto Scaling" },
            { "aws-marketplace-management", "AWS Marketplace Management Portal" },
            { "aws-marketplace", "AWS Marketplace" },
            { "aws-portal", "AWS Billing and Cost Management Console" },
            { "awsconnector", "AWS Connector Service" },
            { "backup-gateway", "AWS Backup Gateway" },
            { "backup-storage", "AWS Backup storage" },
            { "backup", "AWS Backup" },
            { "batch", "AWS Batch" },
            { "billing", "AWS Billing and Cost Management" },
            { "billingconductor", "AWS Billing Conductor" },
            { "braket", "Amazon Braket" },
            { "budgets", "AWS Budget Service" },
            { "bugbust", "AWS BugBust" },
            { "cases", "Amazon Connect Cases" },
            { "cassandra", "Amazon Keyspaces (for Apache Cassandra)" },
            { "ce", "AWS Cost Explorer Service" },
            { "chatbot", "AWS Chatbot" },
            { "chime", "Amazon Chime" },
            { "cleanrooms", "AWS Clean Rooms" },
            { "cloud9", "AWS Cloud9" },
            { "clouddirectory", "Amazon Cloud Directory" },
            { "cloudformation", "AWS CloudFormation" },
            { "cloudfront", "Amazon CloudFront (CDN)" },
            { "cloudhsm", "AWS CloudHSM" },
            { "cloudsearch", "Amazon CloudSearch" },
            { "cloudshell", "AWS CloudShell" },
            { "cloudtrail", "AWS CloudTrail" },
            { "cloudwatch", "CloudWatch" },
            { "codeartifact", "AWS CodeArtifact" },
            { "codebuild", "AWS CodeBuild" },
            { "codecatalyst", "Amazon CodeCatalyst" },
            { "codecommit", "AWS CodeCommit" },
            { "codedeploy", "AWS CodeDeploy" },
            { "codeguru-profiler", "Amazon CodeGuru Profiler" },
            { "codeguru-reviewer", "Amazon CodeGuru Reviewer" },
            { "codeguru", "Amazon CodeGuru" },
            { "codepipeline", "AWS CodePipeline" },
            { "codestar-connections", "AWS CodeStar Connections" },
            { "codestar-notifications", "AWS CodeStar Notifications" },
            { "codestar", "AWS CodeStar" },
            { "codewhisperer", "Amazon CodeWhisperer" },
            { "cognito-identity", "Amazon Cognito Identity" },
            { "cognito-idp", "Amazon Cognito User Pools" },
            { "cognito-sync", "Amazon Cognito Sync" },
            { "comprehend", "Amazon Comprehend" },
            { "comprehendmedical", "Amazon Comprehend Medical" },
            { "compute-optimizer", "AWS Compute Optimizer" },
            { "config", "AWS Config" },
            { "connect-campaigns", "High-volume outbound communications" },
            { "connect", "Amazon Connect" },
            { "consolidatedbilling", "AWS Consolidated Billing" },
            { "controltower", "AWS Control Tower" },
            { "cur", "AWS Cost and Usage Report" },
            { "databrew", "AWS Glue DataBrew" },
            { "dataexchange", "AWS Data Exchange" },
            { "datapipeline", "AWS Data Pipeline" },
            { "datasync", "AWS DataSync" },
            { "dax", "Amazon DynamoDB Accelerator (DAX)" },
            { "dbqms", "Database Query Metadata Service" },
            { "deepcomposer", "AWS DeepComposer" },
            { "deeplens", "AWS DeepLens" },
            { "deepracer", "AWS DeepRacer" },
            { "detective", "Amazon Detective" },
            { "devicefarm", "AWS Device Farm" },
            { "devops-guru", "Amazon DevOps Guru" },
            { "directconnect", "AWS Direct Connect" },
            { "discovery", "AWS Application Discovery Service" },
            { "dlm", "Amazon Data Lifecycle Manager" },
            { "dms", "AWS Database Migration Service" },
            { "docdb-elastic", "Amazon DocumentDB Elastic Clusters" },
            { "drs", "AWS Elastic Disaster Recovery" },
            { "ds", "AWS Directory Service" },
            { "dynamodb", "Amazon DynamoDB" },
            { "ebs", "Amazon Elastic Block Store" },
            { "ec2-instance-connect", "Amazon EC2 Instance Connect" },
            { "ec2", "Amazon Elastic Compute Cloud (EC2)" },
            { "ec2messages", "Amazon Message Delivery Service" },
            { "ecr-public", "Amazon Elastic Container Registry Public" },
            { "ecr", "Amazon Elastic Container Registry (ECR)" },
            { "ecs", "Amazon Elastic Container Service (ECS)" },
            { "eks", "Amazon Elastic Kubernetes Service (EKS)" },
            { "elastic-inference", "Amazon Elastic Inference" },
            { "elasticache", "Amazon ElastiCache" },
            { "elasticbeanstalk", "AWS Elastic Beanstalk" },
            { "elasticfilesystem", "Amazon Elastic File System (EFS)" },
            { "elasticloadbalancing", "Amazon Elastic Load Balancing (ELB)" },
            { "elasticmapreduce", "Amazon Elastic MapReduce (EMR)" },
            { "elastictranscoder", "Amazon Elastic Transcoder" },
            { "elemental-activations", "AWS Elemental Appliances and Software Activation Service" },
            { "elemental-appliances-software", "AWS Elemental Appliances and Software" },
            { "elemental-support-cases", "AWS Elemental Support Cases" },
            { "elemental-support-content", "AWS Elemental Support Content" },
            { "emr-containers", "Amazon EMR on EKS (EMR Containers)" },
            { "emr-serverless", "Amazon EMR Serverless" },
            { "es", "Amazon OpenSearch Service" },
            { "events", "Amazon EventBridge" },
            { "evidently", "Amazon CloudWatch Evidently" },
            { "execute-api", "Amazon API Gateway" },
            { "finspace", "Amazon FinSpace" },
            { "firehose", "Amazon Kinesis Data Firehose" },
            { "fis", "AWS Fault Injection Simulator" },
            { "fms", "AWS Firewall Manager" },
            { "forecast", "Amazon Forecast" },
            { "frauddetector", "Amazon Fraud Detector" },
            { "freertos", "Amazon FreeRTOS" },
            { "freetier", "AWS Free Tier" },
            { "fsx", "Amazon FSx" },
            { "gamelift", "Amazon GameLift" },
            { "gamesparks", "Amazon GameSparks" },
            { "geo", "Amazon Location" },
            { "glacier", "Amazon S3 Glacier" },
            { "globalaccelerator", "AWS Global Accelerator" },
            { "glue", "AWS Glue" },
            { "grafana", "Amazon Managed Grafana" },
            { "greengrass", "AWS IoT Greengrass" },
            { "groundstation", "AWS Ground Station" },
            { "groundtruthlabeling", "Amazon GroundTruth Labeling" },
            { "guardduty", "Amazon GuardDuty" },
            { "health", "AWS Health APIs and Notifications" },
            { "healthlake", "Amazon HealthLake" },
            { "honeycode", "Amazon Honeycode" },
            { "iam", "AWS Identity and Access Management (IAM)" },
            { "identity-sync", "AWS Identity Sync" },
            { "identitystore-auth", "AWS Identity Store Auth" },
            { "identitystore", "identity store used by IAM Identity Center" },
            { "imagebuilder", "Amazon EC2 Image Builder" },
            { "importexport", "AWS Import Export Disk Service" },
            { "inspector", "Amazon Inspector" },
            { "inspector2", "Amazon Inspector2" },
            { "internetmonitor", "Amazon CloudWatch Internet Monitor" },
            { "invoicing", "AWS Invoicing Service" },
            { "iot-device-tester", "AWS IoT Device Tester" },
            { "iot", "AWS IoT" },
            { "iot1click", "AWS IoT 1-Click" },
            { "iotanalytics", "AWS IoT Analytics" },
            { "iotdeviceadvisor", "AWS IoT Core Device Advisor" },
            { "iotevents", "AWS IoT Events" },
            { "iotfleethub", "AWS IoT Fleet Hub for Device Management" },
            { "iotfleetwise", "AWS IoT FleetWise" },
            { "iotjobsdata", "AWS IoT Jobs DataPlane" },
            { "iotroborunner", "AWS IoT RoboRunner" },
            { "iotsitewise", "AWS IoT SiteWise" },
            { "iottwinmaker", "AWS IoT TwinMaker" },
            { "iotwireless", "AWS IoT Core for LoRaWAN" },
            { "iq-permission", "AWS IQ Permissions" },
            { "iq", "AWS IQ" },
            { "ivs", "Amazon Interactive Video Service" },
            { "ivschat", "Amazon Interactive Video Service Chat" },
            { "kafka-cluster", "Apache Kafka APIs for Amazon MSK clusters" },
            { "kafka", "Amazon Managed Streaming for Apache Kafka (MSK)" },
            { "kafkaconnect", "MSK Connect" },
            { "kendra-ranking", "Amazon Kendra Intelligent Ranking" },
            { "kendra", "Amazon Kendra" },
            { "kinesis", "Amazon Kinesis" },
            { "kinesisanalytics", "Amazon Kinesis Data Analytics" },
            { "kinesisvideo", "Amazon Kinesis Video Streams" },
            { "kms", "Key Management Service (KMS)" },
            { "lakeformation", "AWS Lake Formation" },
            { "lambda", "AWS Lambda" },
            { "launchwizard", "AWS Launch Wizard" },
            { "lex", "Amazon Lex" },
            { "license-manager-linux-subscriptions", "AWS License Manager Linux Subscriptions Manager" },
            { "license-manager-user-subscriptions", "AWS License Manager User Subscriptions" },
            { "license-manager", "AWS License Manager" },
            { "lightsail", "Amazon Lightsail" },
            { "logs", "Amazon CloudWatch Logs" },
            { "lookoutequipment", "Amazon Lookout for Equipment" },
            { "lookoutmetrics", "Amazon Lookout for Metrics" },
            { "lookoutvision", "Amazon Lookout for Vision" },
            { "m2", "AWS Mainframe Modernization Service" },
            { "machinelearning", "Amazon Machine Learning" },
            { "macie", "Amazon Macie (V1)" },
            { "macie2", "Amazon Macie (V2)" },
            { "managedblockchain", "Amazon Managed Blockchain" },
            { "marketplacecommerceanalytics", "AWS Marketplace Commerce Analytics Service" },
            { "mechanicalturk", "Amazon Mechanical Turk" },
            { "mediaconnect", "AWS Elemental MediaConnect" },
            { "mediaconvert", "AWS Elemental MediaConvert" },
            { "mediaimport", "AmazonMediaImport" },
            { "medialive", "AWS Elemental MediaLive" },
            { "mediapackage-vod", "AWS Elemental MediaPackage VOD" },
            { "mediapackage", "AWS Elemental MediaPackage" },
            { "mediastore", "AWS Elemental MediaStore" },
            { "mediatailor", "AWS Elemental MediaTailor" },
            { "memorydb", "Amazon MemoryDB" },
            { "mgh", "AWS Migration Hub" },
            { "mgn", "AWS Application Migration Service" },
            { "migrationhub-orchestrator", "AWS Migration Hub Orchestrator" },
            { "migrationhub-strategy", "AWS Migration Hub Strategy Recommendations" },
            { "mobileanalytics", "Amazon Mobile Analytics" },
            { "mobilehub", "AWS Mobile Hub" },
            { "mobiletargeting", "Amazon Pinpoint" },
            { "monitron", "Amazon Monitron" },
            { "mq", "Amazon MQ" },
            { "neptune-db", "Amazon Neptune" },
            { "network-firewall", "AWS Network Firewall" },
            { "networkmanager", "AWS Network Manager" },
            { "nimble", "Amazon Nimble Studio" },
            { "oam", "Amazon CloudWatch Observability Access Manager" },
            { "omics", "Amazon Omics" },
            { "opsworks-cm", "AWS OpsWorks Configuration Management" },
            { "opsworks", "AWS OpsWorks" },
            { "organizations", "AWS Organizations" },
            { "outposts", "AWS Outposts" },
            { "panorama", "AWS Panorama" },
            { "payments", "AWS Payments" },
            { "personalize", "Amazon Personalize" },
            { "pi", "AWS Performance Insights" },
            { "pipes", "Amazon EventBridge Pipes" },
            { "polly", "Amazon Polly" },
            { "pricing", "AWS Price List" },
            { "private-networks", "AWS service providing managed private networks" },
            { "profile", "Amazon Connect Customer Profiles" },
            { "proton", "AWS Proton" },
            { "purchase-orders", "AWS Purchase Orders Console" },
            { "qldb", "Amazon QLDB" },
            { "quicksight", "Amazon Quicksight" },
            { "ram", "Resource Access Manager" },
            { "rbin", "AWS Recycle Bin" },
            { "rds-data", "Amazon RDS Data API" },
            { "rds-db", "Amazon RDS IAM Authentication" },
            { "rds", "Relational Database Service (RDS)" },
            { "redshift-data", "Amazon Redshift Data API" },
            { "redshift-serverless", "Amazon Redshift Serverless" },
            { "redshift", "Amazon Redshift" },
            { "refactor-spaces", "AWS Migration Hub Refactor Spaces" },
            { "rekognition", "Amazon Rekognition" },
            { "resiliencehub", "AWS Resilience Hub Service" },
            { "resource-explorer-2", "AWS Resource Explorer" },
            { "resource-explorer", "AWS Tag Editor" },
            { "resource-groups", "AWS Resource Groups" },
            { "rhelkb", "Amazon RHEL Knowledgebase Portal" },
            { "robomaker", "AWS RoboMaker" },
            { "rolesanywhere", "AWS Identity and Access Management Roles Anywhere" },
            { "route53-recovery-cluster", "Amazon Route 53 Recovery Cluster" },
            { "route53-recovery-control-config", "Amazon Route 53 Recovery Controls" },
            { "route53-recovery-readiness", "Amazon Route 53 Recovery Readiness" },
            { "route53", "Amazon Route53" },
            { "route53domains", "Amazon Route53 Domains" },
            { "route53resolver", "Amazon Route53 Resolver" },
            { "rum", "AWS CloudWatch RUM" },
            { "s3-object-lambda", "Amazon S3 Object Lambda" },
            { "s3-outposts", "Amazon S3 on Outposts" },
            { "s3", "Simple Storage Service (S3)" },
            { "sagemaker-geospatial", "Amazon SageMaker geospatial capabilities" },
            { "sagemaker-groundtruth-synthetic", "Amazon SageMaker Ground Truth Synthetic" },
            { "sagemaker", "Amazon SageMaker" },
            { "savingsplans", "AWS Savings Plans" },
            { "scheduler", "Amazon EventBridge Scheduler" },
            { "schemas", "Amazon EventBridge Schemas" },
            { "sdb", "Amazon SimpleDB" },
            { "secretsmanager", "AWS Secrets Manager" },
            { "securityhub", "AWS Security Hub" },
            { "securitylake", "Amazon Security Lake" },
            { "serverlessrepo", "AWS Serverless Application Repository" },
            { "servicecatalog", "AWS Service Catalog" },
            { "servicediscovery", "AWS Cloud Map" },
            { "serviceextract", "AWS Microservice Extractor for .NET" },
            { "servicequotas", "Service Quotas" },
            { "ses", "Simple Email Service (SES)" },
            { "shield", "AWS Shield" },
            { "signer", "AWS Signer" },
            { "simspaceweaver", "AWS SimSpace Weaver" },
            { "sms-voice", "Amazon Pinpoint SMS and Voice Service" },
            { "sms", "AWS Server Migration Service" },
            { "snow-device-management", "AWS Snow Device Management" },
            { "snowball", "AWS Snowball" },
            { "sns", "Simple Notification Service (SNS)" },
            { "sqlworkbench", "AWS SQL Workbench" },
            { "sqs", "Simple Queue Service (SQS)" },
            { "ssm-contacts", "AWS Systems Manager Incident Manager Contacts" },
            { "ssm-guiconnect", "AWS Systems Manager GUI Connect" },
            { "ssm-incidents", "AWS Systems Manager Incident Manager" },
            { "ssm-sap", "AWS Systems Manager for SAP" },
            { "ssm", "AWS Systems Manager" },
            { "ssmmessages", "Amazon Session Manager Message Gateway Service" },
            { "sso-directory", "AWS IAM Identity Center (fka AWS Single Sign-On) Directory" },
            { "sso", "AWS IAM Identity Center (fka AWS Single Sign-On)" },
            { "states", "AWS Step Functions" },
            { "storagegateway", "AWS Storage Gateway" },
            { "sts", "AWS Security Token Service (AWS STS)" },
            { "sumerian", "Amazon Sumerian" },
            { "support", "AWS Support" },
            { "supportapp", "AWS Support App in Slack" },
            { "supportplans", "AWS Support Plans" },
            { "sustainability", "AWS Sustainability" },
            { "swf", "Amazon Simple Workflow Service" },
            { "synthetics", "Amazon CloudWatch Synthetics" },
            { "tag", "Tagging" },
            { "tax", "AWS Tax Settings" },
            { "textract", "Amazon Textract" },
            { "timestream", "Amazon Timestream" },
            { "tiros", "AWS Tiros" },
            { "transcribe", "Amazon Transcribe" },
            { "transfer", "AWS Transfer Family" },
            { "translate", "Amazon Translate" },
            { "trustedadvisor", "AWS Trusted Advisor" },
            { "vendor-insights", "AWS Marketplace Vendor Insights" },
            { "voiceid", "Amazon Connect Voice ID" },
            { "vpc-lattice-svcs", "Amazon VPC Lattice Services" },
            { "vpc-lattice", "Amazon VPC Lattice" },
            { "waf-regional", "AWS WAF Regional" },
            { "waf", "AWS WAF (V1)" },
            { "wafv2", "AWS WAF (V2)" },
            { "wam", "Amazon WorkSpaces Application Manager" },
            { "wellarchitected", "AWS Well-Architected Tool (AWS WA Tool)" },
            { "wisdom", "Amazon Connect Wisdom" },
            { "workdocs", "Amazon WorkDocs" },
            { "worklink", "Amazon WorkLink" },
            { "workmail", "Amazon WorkMail" },
            { "workmailmessageflow", "Amazon WorkMail Message Flow" },
            { "workspaces-web", "Amazon WorkSpaces Web" },
            { "workspaces", "Amazon WorkSpaces (VDI)" },
            { "xray", "AWS X-Ray" },
            { "zocalo", "Amazon WorkDocs" },
        };

        public enum ExitCodes : int
        {
            ErrorParsingCommandLineArguments = -1,
            InvalidAwsServicePrefix = -2,
            UnhandledError = -3,
            AwsIamException = -4,
            AwsCredentialsNotSpecified = -5,
            AwsAccountIdMissing = -6,
            TargetServiceNotFound = -7,
            AwsProfileNotFound = -8,
            OktaCredentialsNotSpecified = -9,
        }
    }
}