class Jets::Commands::Clean::Log

def all_prefixes(log_group_names)

def all_prefixes(log_group_names)
  log_prefixes(log_group_names)
end

def clean

def clean
  are_you_sure?("delete CloudWatch logs")
  say "Removing CloudWatch logs for #{prefix_guess}..."
  log_groups.each do |g|
    next if keep_log_group?(g.log_group_name)
    logs.delete_log_group(log_group_name: g.log_group_name) unless @options[:noop]
    say "Removed log group: #{g.log_group_name}"
  end
  say "Removed CloudWatch logs for #{prefix_guess}"
end

def clean_deploys

def clean_deploys
  groups = deploy_log_groups.sort_by do |g|
    g.log_group_name
  end
  # Keep the last 2 recent log groups so we can see the deleted logic
  groups = groups[0..-3]
  groups.each do |g|
    logs.delete_log_group(log_group_name: g.log_group_name) unless @options[:noop]
  end
end

def deploy_log_groups

def deploy_log_groups
  log_groups.select do |g|
    !keep_log_group?(g.log_group_name) &&
    g.log_group_name.include?('jets-base-path')
  end
end

def keep_log_group?(log_group_name)

Check if it is safe to delete the log group
def keep_log_group?(log_group_name)
  keep_prefixes = keep_prefixes(log_group_names)
  !!keep_prefixes.detect do |keep_prefix|
    log_group_name =~ Regexp.new(keep_prefix)
  end
end

def keep_prefixes(log_group_names)

log groups.
We find and store the prefixes to keep so we don't over aggressively delete

JETS_ENV_EXTRA=xxx created environments.
for the prefix matching addiitonal log groups that belong to other
Check for the prefixes to keep. The slightly tricky thing to watch for is
def keep_prefixes(log_group_names)
  names = log_group_names.reject do |name|
    name =~ %r{/aws/lambda/#{prefix_guess}-jets}
  end
  log_prefixes(names)
end

def log_group_names

def log_group_names
  log_groups.map(&:log_group_name)
end

def log_groups

def log_groups
  groups, next_token = [], true
  while next_token
    next_token = nil if next_token == true # just at start the loop
    resp = logs.describe_log_groups(
      log_group_name_prefix: "/aws/lambda/#{prefix_guess}-",
      next_token: next_token,
    )
    groups += resp.log_groups
    next_token = resp.next_token
  end
  groups
end

def log_prefixes(names)

Strips -jets.* from the full log group name to leave only the prefix behind
def log_prefixes(names)
  names = names.select do |name|
    name.match(Regexp.new("#{prefix_guess}-.*jets"))
  end
  names.map do |name|
    name.sub(/-jets.*/,'')
  end.uniq.sort
end

def prefix_guess

def prefix_guess
  Jets::Naming.parent_stack_name
end