class ApplicationController < ActionController::Base
  # Prevent CSRF attacks by raising an exception.
  # For APIs, you may want to use :null_session instead.
  protect_from_forgery with: :exception
  


  
  before_action :set_locale

  before_action :time_stats

  def time_stats
    @gen_past_time = Time.now
  end
  
  before_action :popups
  
  before_action :debug_translation
  
  before_action :get_sorting
  
  def get_sorting( column_default=nil, direction_default="desc")
    
    
    
    sorting_direction = %w[asc desc].include?(params[:direction]) ? params[:direction] : direction_default
    sorting_column = params[:column] ? params[:column] : column_default
    
    if sorting_direction and sorting_column
      @sorting = [sorting_column, sorting_direction]
    end
  end
  
  
  before_action :set_qi_order
  
  def set_qi_order
    params[:search] = params[:search] || {}
    
    session[:qi_sort_string] = session[:qi_sort_string] || {}
    
    if params[:qi_sort_string].to_s != "" and params[:qi_sort_string][:class]
      
      if current_admin
        if ap = current_admin.admin_preferences.where(:key => "sort_table_"+params[:qi_sort_string][:class]).first
          ap.value = params[:qi_sort_string][:list].to_s
          ap.save
        else
          current_admin.admin_preferences.create(:key => "sort_table_"+params[:qi_sort_string][:class], :value => params[:qi_sort_string][:list].to_s)
        end

  
       
      else
        session[:qi_sort_string][params[:qi_sort_string][:class]] = params[:qi_sort_string][:list].to_s
      end
      
    else
      
    end
    
    
    if params[:qi_sort_string].to_s != "" and params[:qi_sort_string][:nbr_colonnes].to_s != ""
      
      if current_admin
        if ap = current_admin.admin_preferences.where(:key => "sort_table_"+params[:qi_sort_string][:class]+"_nbr_col").first
          ap.value = params[:qi_sort_string][:nbr_colonnes].to_s
          ap.save
        else
          current_admin.admin_preferences.create(:key => "sort_table_"+params[:qi_sort_string][:class]+"_nbr_col", :value => params[:qi_sort_string][:nbr_colonnes].to_s)
        end
           
      else        
        session[:qi_sort_string][params[:qi_sort_string][:class]+"_nbr_col"] = params[:qi_sort_string][:nbr_colonnes].to_s
      end
      
    else
      
    end
    
    
    
    
  end
  
  
  def sort_by_sorting(var, default=nil)
    if @sorting
      klass = var.klass.to_s
    
      if eval(klass).valid_sort.include?(@sorting[0])
        if @sorting[0].split(",").size > 0
          order_text = ""
          i = 0
          @sorting[0].split(",").each do |s|
            
            order_text += "#{s} #{@sorting[1]}"
            order_text += "," if i < (@sorting[0].split(",").size - 1 )
            i+=1
          end
          var = var.order(order_text)
        else
          var = var.order("#{@sorting[0]} #{@sorting[1]}")
        end
      

      end
      
    elsif default
      var = var.order(default)
    end
    
    
    
    return var
    
    

  end
  
  
  
  
  def debug_translation
    if params[:debug_translation]
      if current_admin
       @debug_translation = true 
      end
    end
  end
  def popups

   
  end
  
  def get_public_layout
    "public"
   
      
  end
  

  def set_locale
    # if params[:locale] is nil then I18n.default_locale will be used
    #I18n.locale = params[:locale]#"fr" #
    
    I18n.locale = params[:lang] || :fr
    
    @lang = LangSite.find_by_slug I18n.locale.to_s
  end
  
  def default_url_options(options={})
    { :lang => I18n.locale }  #
  end
  

  def auth_p_customer
    if !current_p_customer
      redirect_to new_public_p_customer_auth_path
    end
  end
      
    
  
  
  
  private
  
  
  def current_p_customer
   @current_p_customer ||= PCustomer.where(:auth_token => cookies[:p_customer_auth_token]).first if cookies[:p_customer_auth_token]
    
  
  end
  
  
  
  private
  
  
    def auth_admin
      if !current_admin
        redirect_to new_admin_admin_auth_path
      end
      
    
    end
  



    def current_admin
      
      if cookies[:admin_remember_token]
        if @current_admin = Admin.find_by_remember_token(cookies[:admin_remember_token]) 
          @current_admin = Admin.find_by_remember_token(cookies[:admin_remember_token]) 
        else
            cookies[:admin_remember_token] =nil
        end
        
      end
      
      
     
    end
    
   

    def get_specific_pref(key="")
      
      sp = SpecificPreference.where(:key => key).first
      
      if sp
        return sp.value
      else
        return ""
      end
      
    end
    
    def has_permission?(permission)
     if current_admin and current_admin.has_permission?(permission)  
       true
     else
       redirect_to "/admin"
       
     end
    end
    
    def is_super_admin
      if current_admin and current_admin.super_admin
        true
      else
        redirect_to "/admin"
      end
    end
    
    
    helper_method :current_admin, :get_specific_pref, :sort_by_sorting, :current_p_customer
  
  
end