class Jets::Dotenv::Ssm

def fetch_ssm_value(key, value)

def fetch_ssm_value(key, value)
  name = value.start_with?("/") ? value :
    "/#{Jets.config.project_name}/#{Jets.env}/#{value}"
  response = ssm.get_parameter(name: name, with_decryption: true)
  response.parameter.value
rescue Aws::SSM::Errors::ParameterNotFound
  @missing << [key, value, name]
  ''
end

def initialize(variables={})

def initialize(variables={})
  @variables = variables
  @missing = []
end

def interpolate!

def interpolate!
  interpolated_variables = @variables.map do |key, value|
    if value[SSM_VARIABLE_REGEXP]
      value = fetch_ssm_value(key, $1)
    end
    [key, value]
  end
  interpolated_variables.each do |key, value|
    ENV[key] = value
  end
  if @missing.empty?
    interpolated_variables.to_h # success
  else
    message = "Error loading .env variables. No matching SSM parameters found for:\n".color(:red)
    message += @missing.map { |k,v,n| "  #{k}=ssm:#{v} # ssm name: #{n}"}.join("\n")
    abort message
  end
end

def ssm

def ssm
  @ssm ||= Aws::SSM::Client.new
end