#!/usr/bin/env python3
import os

import aws_cdk as cdk

from cdk.cdk_stack import CdkStack
import aws_cdk.aws_ec2 as ec2
import aws_cdk as cdk
import aws_cdk.aws_secretsmanager as secretsmanager

import json

# Open the input file
with open('data.json', 'r') as file:
    # Load the JSON data
    data = json.load(file)

def get_value(key):
    return os.environ.get(key, data.get(key.lower()))

tag = cdk.Tag("Name", "Test Credentials-fetcher in Domainless mode")
aws_region = get_value("AWS_REGION")
prefix_list = get_value("PREFIX_LIST")
domain_admin_password = data["domain_admin_password"]
directory_name = data["directory_name"]
windows_instance_tag = data["windows_instance_tag"]
linux_instance_tag = data["linux_instance_tag"]
key_name = get_value("KEY_PAIR_NAME")
number_of_gmsa_accounts = data["number_of_gmsa_accounts"]
s3_bucket = get_value("S3_PREFIX") + data["s3_bucket_suffix"]
app_name = data["stack_name"]
username = data["username"]
password = data["password"]
secret_name = data["secret_name"]
task_definition_template_name = data["task_definition_template_name"]
cluster_name = data["cluster_name"]
docker_image_tag = data["docker_image_tag"]
dockerfile_path = data["dockerfile_path"]
ecr_repo_name = data["ecr_repo_name"]
rpm_file = data["rpm_file"]

app = cdk.App()

cdk_stack = CdkStack(app, app_name)

cdk_stack.init_vpc(prefix_list = prefix_list, key_pair_name=key_name, stack_name=app_name)

cfn_microsoft_AD = cdk_stack.init_DirectoryService(directory_name=directory_name, domain_admin_password=domain_admin_password)

directory_id = cfn_microsoft_AD.ref

cdk_stack.init_route53_endpoint(domain_name = directory_name,
                                vpc = cdk_stack.vpc)

windows_instance = cdk_stack.launch_windows_instance(instance_tag = windows_instance_tag,
                          password = domain_admin_password,
                          domain_name = directory_name,
                          key_name = key_name,
                          number_of_gmsa_accounts = number_of_gmsa_accounts,
                          s3_bucket_name = s3_bucket
                        )

windows_instance.node.add_dependency(cfn_microsoft_AD)

ecs_cluster = cdk_stack.create_ecs_cluster( cluster_name,
                                            instance_tag=linux_instance_tag,
                                            password = domain_admin_password,
                                            domain_name = directory_name,
                                            key_pair=cdk_stack.key_pair,
                                            number_of_gmsa_accounts=number_of_gmsa_accounts,
                                            vpc = cdk_stack.vpc,
                                            security_group=cdk_stack.security_group,
                                            rpm_file=rpm_file,
                                            s3_bucket=s3_bucket)
ecs_cluster.node.add_dependency(windows_instance)

task_definition = cdk_stack.create_task_definition(task_definition_template_name=task_definition_template_name)

docker_image_uri = cdk_stack.build_push_dockerfile_to_ecr(dockerfile_path, ecr_repo_name, aws_region, docker_image_tag)

app.synth()
