# frozen_string_literal: true

module Awspec::Helper
  module Finder
    module Autoscaling
      def find_autoscaling_group(id)
        res = autoscaling_client.describe_auto_scaling_groups({
                                                                auto_scaling_group_names: [id]
                                                              })
        res.auto_scaling_groups.single_resource(id)
      end

      def find_launch_configuration(id)
        res = autoscaling_client.describe_launch_configurations({
                                                                  launch_configuration_names: [id]
                                                                })
        res.launch_configurations.single_resource(id)
      end

      def select_alb_target_group_by_autoscaling_group_name(name)
        res = autoscaling_client.describe_load_balancer_target_groups({
                                                                        auto_scaling_group_name: name
                                                                      })
        res.load_balancer_target_groups
      end

      def select_lb_target_group_by_autoscaling_group_name(name)
        res = autoscaling_client.describe_load_balancer_target_groups({
                                                                        auto_scaling_group_name: name
                                                                      })
        res.load_balancer_target_groups
      end

      def find_block_device_mapping(id, device_id)
        ret = find_launch_configuration(id).block_device_mappings.select do |device|
          next true if device.device_name == device_id
          next true if device.virtual_name == device_id
        end
        ret.single_resource(device_id)
      end

      def select_autoscaling_group_by_vpc_id(vpc_id)
        subnets = []
        select_subnet_by_vpc_id(vpc_id).each { |subnet| subnets << subnet.subnet_id }
        req = {}
        selected = []
        loop do
          res = autoscaling_client.describe_auto_scaling_groups(req)
          res.auto_scaling_groups.select do |auto_scaling_group|
            vpc_zone_identifiers = auto_scaling_group.vpc_zone_identifier.split(',')
            selected.push(auto_scaling_group) if vpc_zone_identifiers.any? do |vpc_zone_identifier|
              subnets.include?(vpc_zone_identifier)
            end
          end
          break if res.next_token.nil?

          req[:next_token] = res.next_token
        end
        selected
      end
    end
  end
end
