class Admin::PagesController < Admin::ItemsController
helper Admin::PagePartsHelper
include Admin::FrontendWidgetInterface
  def show
    @item = Page.find(params[:id])
    respond_to do |format|
      format.html { 
        render 'admin/items/index' 
      }
      format.js  {}
    end
  end

  def new
    @item = Page.new
    @item.parent = Item.find(params[:parent_id]) rescue nil
    # @apps = ModuleApp.for_frontend_select

    @designs = Design.all.entries
    @themes = Design.first.themes
    @module_apps = ModuleApp.for_frontend_select
    @app_frontend_urls = nil
    @categories = nil
    @tags = nil
    @page_frontend_data_counts = nil
    @frontend_styles = nil
    @selected={
      :design => @designs.first,
      :theme=> @themes.first,
      :module_app=>nil,#@module_apps.first
      :app_frontend_url=> nil, #@module_apps.first
      :category=>nil,
      :tag=>nil,
      :page_frontend_data_count=>nil,
      :frontend_style => nil
    }
  end

  def edit
    @item = Page.find(params[:id])

    @designs = Design.all.entries
    @themes = @item.design ? @item.design.themes : @designs.first.themes
    @module_apps = ModuleApp.for_frontend_select
    @categories = nil
    @tags = nil
    @page_frontend_data_counts = nil
    @frontend_styles = nil

    @selected={
      :design => @item.design || @designs.first,
      :theme=> @item.theme,
      :module_app=>@item.module_app,#@module_apps.first
      :app_frontend_url=> @item.app_frontend_url, #@module_apps.first
      :category=>nil, #fetch by method: get_categories_and_tags
      :tag=>nil, #fetch by method: get_categories_and_tags
      :page_frontend_data_count=>nil,
      :frontend_style => nil
    }
    @app_frontend_urls = @item.module_app ? select_array_for_app_frontend_urls(@item.module_app.app_pages) : nil
    get_categories_and_tags
    get_frontend_data_count
  end

  def reload_themes
    design = Design.find(params[:design_id])
    @themes = design.themes
    respond_to do |format|
      format.js  {}
    end
  end

  def reload_frontend_pages
    @item = Page.find(params[:id]) rescue Page.new 
        @selected={
      :design => nil,
      :theme=> nil,
      :module_app=>(ModuleApp.find(params[:module_app_id]) rescue nil),
      :app_frontend_url=> @item.app_frontend_url || 'default_widget', #@module_apps.first
      :category=>nil, #fetch by method: get_categories_and_tags
      :tag=>nil, #fetch by method: get_categories_and_tags
      :page_frontend_data_count=>nil,
      :frontend_style => nil
    }
    @app_frontend_urls = @selected[:module_app] ? select_array_for_app_frontend_urls(@selected[:module_app].app_pages) : nil

    get_categories_and_tags
    get_frontend_data_count
    get_frontend_styles

    respond_to do |format|
      format.js  {}
    end
  end
  

  def reload_front_end_setting
    @item = Page.find(params[:id]) rescue Page.new 
    
    @categories = nil
    @tags = nil
    @page_frontend_data_counts = nil

    @selected={
      # :design => @item.design || @designs.first,
      # :theme=> @item.theme,
      :module_app=>ModuleApp.find(params[:module_app_id]),
      :app_frontend_url=>  params[:frontend] ,
      :category=>nil, #fetch by method: get_categories_and_tags
      :tag=>nil, #fetch by method: get_categories_and_tags
      :page_frontend_data_count=>nil,
      :frontend_style => nil
    }
    @app_frontend_urls = @selected[:module_app].nil? ? nil :  @selected[:module_app].app_pages.each{|name,data| [I18n.t(data["i18n"]),name]}
    @frontend_styles = @selected[:module_app].app_pages[params["frontend"]]["style"] rescue nil

  end  


  def reload_widget_field
    @index = params[:field_seri].to_i
    @item = Page.find(params[:id]) rescue Page.new 
    @selected = {
      :module_app=> (ModuleApp.find(params[:module_app_id]) || @item.module_app   ),
      :default_widget_field=>params[:widget_field_value]
    }
    # @choosen_field = params[:widget_field_value]
    # @module_app = @item.module_app
    # @module_app = ModuleApp.find params[:module_app_id] if @module_app.nil?
  end

  def create
    clean_tags_and_category_params
    @item = Page.new(params[:page])
	
	if @item.module_app && @item.module_app.key == 'page_content'
	  @item.page_contexts.build(:create_user_id => current_user.id, :update_user_id => current_user.id )
	end
	
    if @item.save
      flash.now[:notice] = t('create.success.page')
      respond_to do |format|
        format.html { 
          redirect_to admin_page_url(@item) 
        }
        format.js {}
      end
    else
      flash.now[:error] = t('create.error.page')
      @designs = Design.all.entries
      @design =  Design.find(params[:page][:design]) ||  Design.first
      @themes = @design.themes
      @module_apps = ModuleApp.for_frontend_select
      @selected={
      :design => params[:page][:design],
      :theme=> (Theme.find(params[:page][:theme_id]) rescue nil),
      :module_app=> (ModuleApp.find(params[:page][:module_app_id]) rescue nil) ,#@module_apps.first
      :app_frontend_url=> params[:page][:app_frontend_url], #@module_apps.first
      :category=>params[:page][:category],
      :tag=>params[:page][:tag],
      :page_frontend_data_count=>params[:page][:page_frontend_data_count],
      :frontend_style => params[:page][:frontend_style]
     }
      @app_frontend_urls = @item.module_app ? select_array_for_app_frontend_urls(@item.module_app.app_pages) : nil
      get_categories_and_tags
      get_frontend_data_count
      render :action => "new"
    end
  end

  def update
    clean_tags_and_category_params
    @item = Page.find(params[:id])

    if @item.module_app && @item.module_app.key == 'page_content' && @item.page_contexts.blank?
      @item.page_contexts.build(:create_user_id => current_user.id, :update_user_id => current_user.id )
    end
    if @item.update_attributes(params[:page])
      flash[:notice] = t('update.success.page')
      respond_to do |format|
        format.html {
          redirect_to admin_page_url(@item) 
        }
        format.js {}
      end
    else
      render :action => "edit"
    end
  end

  def destroy
    @item = Page.find(params[:id])
    @item.destroy
    respond_to do |format|
      format.html { 
        redirect_to admin_items_url( :parent_id => @item.parent_id )
      }
      format.js  { redirect_to admin_items_url }
    end
  end
  
  def delete
    @item = Page.find(params[:id])
    @item.destroy
    respond_to do |format|
      format.html {}
      format.js  { @item = @item.parent }
    end
  end

  protected

  def get_frontend_styles
    has_old_value =  @selected[:module_app].app_pages[@selected[:app_frontend_url]]
    @frontend_styles = has_old_value ? has_old_value["style"] : (@selected[:module_app].app_pages.first[1]["style"] rescue nil)
  end
end