#
# The top level Toodledo module.  This does very little that is
# interesting.  You probably want to look at Toodledo::Session
#
module Toodledo

  # Required for gem  
  VERSION = '1.1.1'
  
  # Returns the configuration object.
  def self.get_config()
    return @@config
  end
  
  # Sets the configuration explicitly.  Useful when you
  # want to specifically set the configuration without
  # using the file system.
  def self.set_config(override_config)
    @@config = override_config
  end
  
  #
  # Provides a convenient way of connecting and running a session.
  # 
  # The following will do most everything you want, assuming you've set
  # the config correctly:
  #   
  #   require 'toodledo'
  #   Toodledo.begin do |session|
  #     session.add_task('foo')
  #   end
  #
  def self.begin(logger = nil)
    config = Toodledo.get_config()
          
    proxy = config['proxy']
          
    connection = config['connection']
    base_url = connection['url']
    user_id = connection['user_id']
    password = connection['password']
    
    session = Session.new(user_id, password, logger)

    base_url = Session::DEFAULT_API_URL if (base_url == nil)
    session.connect(base_url, proxy)
    
    if (block_given?)
      yield(session)
    end
    
    session.disconnect()
  end  
end

require 'toodledo/server_error'
require 'toodledo/item_not_found_error'
require 'toodledo/invalid_configuration_error'
require 'toodledo/task'
require 'toodledo/context'
require 'toodledo/goal'
require 'toodledo/folder'
require 'toodledo/repeat'
require 'toodledo/priority'
require 'toodledo/session'
