namespace :portunus do

desc "Output master keys for use with Portunus"
task generate_master_keys: :environment do
  adaptor_name = Portunus.configuration.storage_adaptor.to_s
  puts "Generating keys for adaptor: #{adaptor_name}"

  keys = (0..5).to_a.map do 
    { 
      "key": ::Portunus.configuration.encrypter.generate_key, 
      "enabled": true,
      "created_at": DateTime.now.rfc3339
    }
  end

  if adaptor_name == "Portunus::StorageAdaptors::Credentials"
    key_hash = keys.inject({}) do |hash, key|
      hash[SecureRandom.hex(16).to_s] = key
      hash
    end

    puts({ portunus: key_hash }.to_yaml)
  elsif adaptor_name == "Portunus::StorageAdaptors::Environment" 
    output = ""
    keys.map do |portunus_key|
      key_name = SecureRandom.hex(10)
      output += "export PORTUNUS_#{key_name}_KEY=#{portunus_key[:key]}\n"
      output += "export PORTUNUS_#{key_name}_ENABLED=true\n"
      output += "export PORTUNUS_#{key_name}_CREATED_AT=#{portunus_key[:created_at]}\n"
    end

    puts output
  else
    raise ::Portunus::Error.new("Adaptor does not support key generation")
  end
end

end