module VPC
  class Configuration
    include ConfigurationHelper

    attr_reader :vpc_name,
                :vpc_cidr_block,
                :subnet_names,
                :route_table_names,
                :public_subnets,
                :private_subnets,
                :public_route_tables,
                :private_route_tables,
                :internet_gateway,
                :vpc_name_tag,
                :vpc_group_tag,
                :vpn_info

    def initialize
      vpc_tags = get_yaml_vpc_tags
      @vpc_name = vpc_tags['NAME']['VALUE']
      @vpc_group_name = vpc_tags['GROUP']['VALUE']
      @vpc_cidr_block = get_yaml_vpc_cidr_block

      vpc_subnets = get_yaml_vpc_subnets
      @subnet_names = []
      vpc_subnets['PUBLIC'].each do |v|
        @subnet_names << v['CONFIG']['SUBNET_TAGS'].first['NAME']['VALUE']
      end
      vpc_subnets['PRIVATE'].each do |v|
        @subnet_names << v['CONFIG']['SUBNET_TAGS'].first['NAME']['VALUE']
      end
      @public_subnets = vpc_subnets['PUBLIC']
      @private_subnets = vpc_subnets['PRIVATE']

      vpc_route_tables = get_yaml_vpc_route_tables
      @route_table_names = []
      vpc_route_tables['PUBLIC'].each do |v|
        @route_table_names << v['CONFIG']['ROUTE_TABLE_TAGS'].first['NAME']['VALUE']
      end
      vpc_route_tables['PRIVATE'].each do |v|
        @route_table_names << v['CONFIG']['ROUTE_TABLE_TAGS'].first['NAME']['VALUE']
      end
      @public_route_tables = vpc_route_tables['PUBLIC']
      @private_route_tables = vpc_route_tables['PRIVATE']

      @internet_gateway = get_yaml_internet_gateway

      @vpc_name_tag = {key: vpc_tags['NAME']['KEY'], value: @vpc_name}
      @vpc_group_tag = {key: vpc_tags['GROUP']['KEY'], value: @vpc_group_name}

      @vpn_info = get_yaml_vpn_info
    end

    def get_internet_gateway_name
      internet_gateway['IG_TAGS']['NAME']['VALUE']
    end

    def get_vpn_customer_gateways
      vpn_info['CUSTOMER_GATEWAYS']
    end

    def get_vpn_gateway
      vpn_info['VPN_GATEWAY']
    end

    def get_vpn_connections
      vpn_info['VPN_CONNECTIONS']
    end

  end

  class ConfigurationStub < Configuration
    def initialize
      super
    end
  end
end