require 'yaml'
require 'oauth'
require 'twitter'
require 'launchy'
require 'colorize'


#
# extend Hash class to turn keys into symbols
#
class Hash
  #
  # turn keys in this hash into symbols
  def symbolize_keys!
    replace(inject({}) do |hash,(key,value)|
      hash[key.to_sym] = value.is_a?(Hash) ? value.symbolize_keys! : value
      hash
    end)
  end
end

#
# the big kahuna!
module Chatterbot
  @@from_helper = false

  #
  # load in our assorted modules
  def self.load
    require "chatterbot/config_manager"
    require "chatterbot/config"
    require "chatterbot/logging"
    require "chatterbot/blocklist"
    require "chatterbot/safelist"
    require "chatterbot/ui"
    require "chatterbot/client"    
    require "chatterbot/search"
    require "chatterbot/direct_messages"    
    require "chatterbot/tweet"
    require "chatterbot/retweet"
    require "chatterbot/favorite"
    require "chatterbot/profile"
    require "chatterbot/reply"
    require "chatterbot/home_timeline"
    require "chatterbot/followers"
    require "chatterbot/helpers"
    require "chatterbot/utils"

    require "chatterbot/bot"
  end

  # setter to track if we're being called from a helper script
  def self.from_helper=(x)
    @@from_helper = x
  end

  # are we being called from a helper script?
  def self.from_helper
    @@from_helper
  end
  
  require 'chatterbot/version'
  
  # Return a directory with the project libraries.
  def self.libdir
    t = [File.expand_path(File.dirname(__FILE__)), "#{Gem.dir}/gems/chatterbot-#{Chatterbot::VERSION}"]

    t.each {|i| return i if File.readable?(i) }
    raise "both paths are invalid: #{t}"
  end
end


# mount up
Chatterbot.load
