#####
# Bootstrap the Rails environment, frameworks, and default configuration
####

# Make sure we are using the latest rexml
rexml_versions = ['', File.join(File.dirname(__FILE__), '..', 'vendor', 'plugins', 'rexml', 'lib', '')].collect { |v|
  `ruby -r "#{v + 'rexml/rexml'}" -e 'p REXML::VERSION'`.split('.').collect {|n| n.to_i} }
$:.unshift(File.join(File.dirname(__FILE__), '..', 'vendor', 'plugins', 'rexml', 'lib')) if (rexml_versions[0] <=> rexml_versions[1]) == -1

require File.join(File.dirname(__FILE__), 'boot')

require 'active_support/secure_random'

require File.join(File.dirname(__FILE__), "environment_variables")

Rails::Initializer.run do |config|

  # Secret session key
  #   The secret session key is automatically generated, and stored
  #   in a file, for reuse between server restarts. If you want to
  #   change the key, just delete the file, and it will be regenerated
  #   on the next restart. Doing so will invalitate all existing sessions.
  secret_file = Rails.root.join("secret")
  if File.exist?(secret_file)
    secret = secret_file.read
  else
    secret =  ActiveSupport::SecureRandom.hex(64)
    File.open(secret_file, 'w', 0600) { |f| f.write(secret) }
  end
  config.action_controller.session = {
    :key => "instiki_session",
    :secret => secret
   }

  # Don't do file system STAT calls to check to see if the templates have changed.
  #config.action_view.cache_template_loading = true

  # Skip frameworks you're not going to use
  config.frameworks -= [ :action_web_service, :action_mailer ]

  # Use the database for sessions instead of the file system
  # (create the session table with 'rake create_sessions_table')
  config.action_controller.session_store = :active_record_store

  # Enable page/fragment caching by setting a file-based store
  # (remember to create the caching directory and make it readable to the application)
  config.cache_store = :file_store, "#{RAILS_ROOT}/cache"

  # Activate observers that should always be running
  config.active_record.observers = :page_observer

  # Use Active Record's schema dumper instead of SQL when creating the test database
  # (enables use of different database adapters for development and test environments)
  config.active_record.schema_format = :sql

  # disable IP spoof check, which was causing problems with
  # accessing the nLab through a proxy
  # cf. http://writeheavy.com/2011/07/31/when-its-ok-to-turn-of-rails-ip-spoof-checking.html
  config.action_controller.ip_spoofing_check = false

  config.load_paths << "#{RAILS_ROOT}/app/api"

  File.umask(0026)
end

# Instiki-specific configuration below
require_dependency 'instiki_errors'

require 'erubis/helpers/rails_helper'
#require 'jcode'

# Miscellaneous monkey patches (here be dragons ...)
require 'caching_stuff'
require 'logging_stuff'
require 'rack_stuff'

#Additional Mime-types
mime_types = YAML.load_file(File.join(File.dirname(__FILE__), 'mime_types.yml'))
Rack::Mime::MIME_TYPES.merge!(mime_types)

Encoding.default_internal = 'utf-8'
Encoding.default_external = 'utf-8'
