#!/usr/bin/env ruby
require File.join(File.dirname(__FILE__), '..', 'lib', 'fog')
require 'irb'
require 'yaml'

module Fog
  module Credentials
    key = (ARGV.first && :"#{ARGV.first}") || :default
    unless Fog.credentials(key)
      print("\n  To run as '#{key}', add credentials like the following to ~/.fog\n")
      yml = <<-YML

:#{key}:
  :aws_access_key_id: INTENTIONALLY_LEFT_BLANK
  :aws_secret_access_key: INTENTIONALLY_LEFT_BLANK
  :rackspace_api_key: INTENTIONALLY_LEFT_BLANK
  :rackspace_username: INTENTIONALLY_LEFT_BLANK
  :slicehost_password: INTENTIONALLY_LEFT_BLANK

YML
      print(yml)
      raise ArgumentError.new("No credentials for :#{key}")
    end
  end
end

module AWS
  class << self
    key = (ARGV.first && :"#{ARGV.first}") || :default
    if Fog.credentials(key)[:aws_access_key_id] && Fog.credentials(key)[:aws_secret_access_key]

      def connections
        @@connections ||= Hash.new do |hash, key|
          credentials = {
            :aws_access_key_id => Fog.credentials[:aws_access_key_id],
            :aws_secret_access_key => Fog.credentials[:aws_secret_access_key]
          }
          hash[key] = case key
          when :ec2
            Fog::AWS::EC2.new(credentials)
          when :s3
            Fog::AWS::S3.new(credentials)
          end
        end
      end

      def addresses
        connections[:ec2].addresses
      end

      def buckets
        connections[:s3].buckets
      end

      def flavors
        connections[:ec2].flavors
      end

      def servers
        connections[:ec2].servers
      end

      def key_pairs
        connections[:ec2].key_pairs
      end

      def security_groups
        connections[:ec2].security_groups
      end

      def snapshots
        connections[:ec2].snapshots
      end

      def volumes
        connections[:ec2].volumes
      end

    end
  end
end

module Rackspace
  class << self
    key = (ARGV.first && :"#{ARGV.first}") || :default
    if Fog.credentials(key)[:rackspace_api_key] && Fog.credentials(key)[:rackspace_username]

      def connections
        @@connections ||= Hash.new do |hash, key|
          credentials = {
            :rackspace_api_key => Fog.credentials[:rackspace_api_key],
            :rackspace_username => Fog.credentials[:rackspace_username]
          }
          hash[key] = case key
          when :files
            Fog::Rackspace::Files.new(credentials)
          when :servers
            Fog::Rackspace::Servers.new(credentials)
          end
        end
      end

      def flavors
        connections[:servers].flavors
      end

      def images
        connections[:servers].images
      end

      def servers
        connections[:servers].servers
      end
      
    end
  end
end

ARGV.clear # Avoid passing args to IRB
IRB.setup(nil)
@irb = IRB::Irb.new(nil)
IRB.conf[:MAIN_CONTEXT] = @irb.context
@irb.context.workspace = IRB::WorkSpace.new(binding)
catch(:IRB_EXIT) { @irb.eval_input }