class DefaultWidgetController< OrbitWidgetController

  def front_end_available(var)
    @page_part = case params[:item_type]
    when "page"
      Page.find params[:page_id]
    when "page_part"
      PagePart.find params[:part_id]  
    end
    @page_part.module_app.enable_frontend?
  end

  def query_for_default_widget

    @ori_class_name = @default_widget["query"].split('.')[0]
    result = nil
    result_objects = nil

    if !params["tag_id"].blank?
      if params["category_id"].blank? #has tag no cate
        result = @ori_class_name.constantize.where(:tagged_ids.in => params["tag_id"])
      else #has tag and cate
        result = eval("#{@ori_class_name}.where(:#{get_category_field_name}.in=>params['category_id'], :tagged_ids.in => params['tag_id'])")
      end
    elsif params["category_id"].blank?  #no tag no cate
      result = eval(@default_widget["query"])
    else #no tag has cate
      result = eval("#{@ori_class_name}.where(:#{get_category_field_name}.in=>params['category_id'])")
    end
    result.available_for_lang(I18n.locale).can_display.desc(:is_top, :postdate)
  end

  def search_result
      @search = query_for_default_widget.solr_search do 
        fulltext params[:search_query]
      end
      search_result =  @search.results.collect{|result| result.id}
      @items = eval(@ori_class_name).all.available_for_lang(I18n.locale).can_display.any_in(_id:search_result)
  end

  def default_widget
    @search = params["search_query"].blank?  ?  false : true

    if !params[:id].blank? and !params["clicked_field_name"].blank?
      clicked_field_name = params["clicked_field_name"].to_sym
      redirect_to eval("#{@page_part.module_app.widget_fields_link_method[clicked_field_name][:method]}('#{params[:id]}', {inner: #{params[:inner] || true}})")
    elsif !params[:id].blank? and params["preview"]
      clicked_field_name = :title
      @preview_pages = @page_part.module_app.widget_fields_link_method.find_all{|t| t[1].has_key?(:preview)}.collect{|t| t[0]}
      redirect_to eval("#{@page_part.module_app.widget_fields_link_method[clicked_field_name][:method]}('#{params[:id]}', {preview: true,inner: #{params[:inner] || true},clicked_field_name: '#{@preview_pages.first.to_s}'})")      
    else
      @tag_class = nil
      @default_widget = @page_part.module_app.get_default_widget
      @widget_image_field = @default_widget["image"] || @default_widget[:image]
      case @page_part
      when Page
        @frontend_field_names = @page_part.frontend_field_name
        @frontend_classes = @page_part.frontend_class
        @frontend_sat_to_links = @page_part.frontend_sat_to_link

        @data_limit = @page_part.frontend_data_count.is_a?(Fixnum) ? @page_part.frontend_data_count : (@page_part.frontend_data_count.to_i rescue 3)
        @paginate = true
        @page_id = @page_part.id
      when PagePart
        @frontend_field_names = @page_part.widget_field_name
        @frontend_classes = @page_part.widget_class
        @frontend_sat_to_links = @page_part.widget_sat_to_link

        @fields = @page_part.widget_field
        @data_limit = @page_part.widget_data_count.is_a?(Fixnum) ? @page_part.widget_data_count : (@page_part.widget_data_count.to_i rescue 3)
      end

      if params[:filter_category_id] and !params[:filter_category_id].blank?
        @data = get_filter_data.page(params[:page_main]).per(@data_limit)
        
      elsif @paginate || @search
        if @search
          @data = search_result.page(params[:page_main]).per(@data_limit) rescue []
        else #regular listing
          @data = query_for_default_widget.includes(@widget_image_field).page(params[:page_main]).per(@data_limit)
        end
        # @data = query_for_default_widget.limit(@data_limit).includes(@widget_image_field)
      else
        @data = query_for_default_widget.includes(@widget_image_field).limit(@data_limit)
        # @data = eval(@default_widget["query"]).limit(@data_limit).includes(@widget_image_field).desc(:created_at)
      end
      case params[:type]
      when "typeA"
        @tag_class = 'default_widget_typeA'
        @partial = "typeA"
      when /typeB_/
        @tag_class = "default_widget_#{params[:type]}"
        @partial = "typeB"
      when "typeC"
        @tag_class = 'default_widget_typeC'
        @partial = "typeC"
      end
    end
  end

  def get_filter_data
    model = @default_widget["query"].classify.constantize
    if params[:filter_category_id].is_a? Array
      data = model.where(:category_id.in => params[:filter_category_id])
    elsif params[:filter_category_id].is_a? String
      data = model.where(:category_id => params[:filter_category_id])
    end
    data.available_for_lang(I18n.locale).can_display.desc(:is_top, :postdate)
  end

  
  
  def get_category_field_name
    @ori_class_name = @ori_class_name.constantize
    @ori_class_name.fields.each_key do |key|
      return key if key.include?('category_id')
    end
    nil
  end

end
