class ApplicationController < ActionController::Base
  protect_from_forgery
  
  include Parser
  
  helper :all
  before_filter :set_locale, :set_site
  
  # Find the parent for the given item
  def find_parent_item
    @parent_item  = Item.first(:conditions => { :id => BSON::ObjectId(params[:parent_id]) }) rescue nil
  end
  
  # Check if the current_user is admin
  def is_admin?
    redirect_to root_url unless current_user.admin?
  end
  
  # Render the page
  def render_page
    if @item
      render :text => parse_page(@item)
    else
      render :text => '404 Not Found'
    end
  end
  
  # Set I18n.locale
  def set_locale
    # update session if passed
    session[:locale] = params[:locale] if params[:locale]

    # set locale based on session or default
    begin
      # check if locale is valid for non site pages
      if LIST[:forbidden_item_names].include?(env['PATH_INFO'].split('/')[1].to_s) && !VALID_LOCALES.include?(session[:locale])
        I18n.locale = I18n.default_locale
      else
        I18n.locale = session[:locale]
      end
    rescue
      I18n.locale = I18n.default_locale
    end    
  end
    
  # Set the site variables
  def set_site
    # set site if exist or create site
    @site = Site.first || Site.create({:valid_locales => [], :in_use_locales => []})
    session[:site] = @site.id
    @site_in_use_locales = @site.in_use_locales
    @site_valid_locales = @site.valid_locales
  end
  
  def set_current_item
    session[:current_page] = params[:id] || @item.id rescue nil
  end

end
