from typing import List, Mapping

from infra.interfaces import IVpcRivStack
from constructs import Construct
from aws_cdk import (
    core,
    aws_ec2 as ec2,
    aws_iam as iam,
)

class JumpBoxConstruct(Construct):
  @property
  def riv_stack(self)->IVpcRivStack:
    return self.__landing_zone

  def __init__(self, scope:Construct, id:str, riv_stack:IVpcRivStack, **kwargs) -> None:
    '''
    Configure emphemeral jumpbox for testing
    '''
    super().__init__(scope,id, **kwargs)
    self.__landing_zone = riv_stack

    # Only required for debugging the jumpbox
    #key_pair_name = 'nbachmei.personal.'+core.Stack.of(self).region

    role = iam.Role(self,'Role',
      assumed_by=iam.ServicePrincipal(
        service='ec2',
        region=core.Stack.of(self).region),
      managed_policies=[
        iam.ManagedPolicy.from_aws_managed_policy_name('AmazonSSMManagedInstanceCore'),
        iam.ManagedPolicy.from_aws_managed_policy_name('AmazonSSMDirectoryServiceAccess'),
      ])

    self.instance = ec2.Instance(self,'Instance',
      role= role,
      vpc= riv_stack.vpc,
      #key_name= key_pair_name,
      instance_type=ec2.InstanceType.of(
        instance_class= ec2.InstanceClass.BURSTABLE3,
        instance_size=ec2.InstanceSize.SMALL),
      allow_all_outbound=True,
      user_data_causes_replacement=True,
      security_group= riv_stack.security_group,
      vpc_subnets= ec2.SubnetSelection(subnet_group_name='Default'),
      machine_image= self.machine_image)

  @property
  def machine_image(self)->ec2.IMachineImage:
    return ec2.MachineImage.generic_windows(ami_map={
      'us-east-1': 'ami-0f93c815788872c5d',
      'us-east-2': 'ami-0b697c4ae566cad55',
      'eu-west-1': 'ami-03b9a7c8f0fc1808e',
      'us-west-2': 'ami-0b7ebdd52b84c244d',
    })