Orbit::Application.routes.draw do
  # get "robots.txt" => 'robots#index'

  devise_for :users do
    match "/users_passwd" => "desktop/registrations#update", :as => :users_passwd, :via => :put
  end

  mount Resque::Server, :at => "/admin/resque"

  # routes for sinatra app
  match '/site/set_registered', :to => CentralServerExchangeApp  
  match '/site/public_key', :to => CentralServerExchangeApp 
  match '/site/update', :to => GithubApp
  match '/purchase/:type', :to => CentralServerExchangeApp

  match 'load_orbit_bar' => 'pages#load_orbit_bar'

  # routes for admin
  namespace :admin do
    mount Resque::Server.new, :at => "/resque"
    resources :assets do   
      collection do
        get 'file_upload'
        get 'delete'
      end
    end
    resources :asset_categories
    resources :asset_tags
    resources :app_auths 
    resources :object_auths  do
      match 'new_interface/:ob_type/:title/new' => "object_auths_new_interface#new" ,:as => :init_ob_auth,:via => :get
      match 'new_interface' => "object_auths_new_interface#setting" ,:as => :ob_auth,:via => :get
      match 'new_interface' => "object_auths_new_interface#update_setting" ,:as => :ob_auth,:via => :post
      match 'new_interface' => "object_auths_new_interface#user_list" ,:as => :ob_auth_show,:via => :put

      collection do
        match 'new/:type/:obj_id',:action => 'new',:via => "get",:as => :init
      end
      member do
        match ':id/create_role',:action => 'create_role',:via => "post",:as => :create_role
        match 'remove/:type/:target_id' ,:action=> 'remove_role',:via => "delete",:as =>:remove
      end
    end

    match 'ad_banners/:id/preview' => 'ad_banners#realtime_preview',:as => :realtime_preview_ad_banner,:via => :put
    match 'ad_banners/:id/rename' => 'ad_banners#rename',:as => :rename_ad_banner,:via => :post

    resources :ad_banners do 
      collection do
        match 'new_ad_image' => 'ad_images#new',:as => :new_ad_image,:via => :get
        match 'new_ad_image' => 'ad_images#create',:as => :create_ad_image,:via => :post
      end
      resources :ad_images ,:except => [:show,:index]
    end

    resources :dashboards
    resources :designs do
      collection do
        get 'upload_package'
        get 'delete'
        post 'upload_package'
      end
      member do
        post 'edit_file'  => 'designs#edit_file'
        post 'update_file' => 'designs#update_file'
        post 'upload_image' => 'designs#upload_image'
      end
    end

    resources :infos do
      get 'add_attribute_field'
    end

    resources :items

    match 'update_position' => 'items#update_position'
    resources :links do
      member do
        get 'delete'
      end
    end

    resources :pages do
      collection do
        get 'reload_after_module_changed', :action=>'reload_frontend_pages'
        get 'reload_after_list_changed',:action=> 'reload_front_end_setting'
      end
      member do
        get 'delete'
        get 'reload_themes'
        get 'reload_after_module_changed',:action=>'reload_frontend_pages'
        get 'reload_after_list_changed',:action=> 'reload_front_end_setting'
        get 'reload_after_widget_field_changed',:action=> 'reload_widget_field'
      end
    end

    resources :module_apps do
      match 'manager_auth_proc' => "module_apps_new_interface#setting" ,:as => :manager_auth_proc,:via => :get
      match 'manager_auth_proc' => "module_apps_new_interface#update_setting" ,:as => :manager_auth_proc,:via => :post
      match 'manager_auth_proc' => "module_apps_new_interface#user_list" ,:as => :manager_auth_show,:via => :put
      resources :app_auths do
        member do
          match 'remove/:type/:target_id' ,:action=> 'remove',:via => "delete",:as =>:remove
        end
      end

      member do
        match 'assign_manager' ,:action=> 'assign_manager',:via => "post",:as =>:assign_manager
        match 'assign_sub_manager' ,:action=> 'assign_sub_manager',:via => "post",:as =>:assign_sub_manager

        match 'remove_manager/:app_manager_id' ,:action=> 'remove_manager',:via => "delete",:as =>:remove_manager
        match 'remove_sub_manager/:app_sub_manager_id' ,:action=> 'remove_sub_manager',:via => "delete",:as =>:remove_sub_manager
      end
    end

    resources :page_parts do
      member do
        get 'reload_after_widget_field_changed',:action=>'reload_widget_field'
        get 'reload_after_module_changed',:action=>'reload_widgets'
        get 'reload_after_list_changed',:action=> 'reload_widget_styles'
        get 'reload_r_tag_options'
      end
    end

    resources :plugins
    resources :purchases do
      collection do
        get 'install_app'
      end
      member do
        get 'buy_template'
        get 'download'
      end
    end

    resources :roles do
      get 'role_field'
      get 'sub_role_field'
      get 'sub_role'
      get 'add_sub_role'
      get 'edit_sub_role'
      get 'add_attribute_field'
    end

    resources :sites do
      get 'mail_setting'
      get 'site_info'
      get 'sitemap'
      get 'sitemap_frontend'
      get 'sitemap_toggle', :on => :member
      get 'system_info'
      get 'ui_theme'
      get 'change_design'
    end

    resources :tags
    resources :users

    resources :users_new_interface do
      member do
        get 'temp_edit'
      end
    end

    resources :member_selects do
      match 'member_select_search' => "member_selects#member_select_search" ,:as => :member_select_search,:via => "post"
      match 'member_select_add' => "member_selects#member_select_add" ,:as => :member_select_add,:via => "post"
    end

    match 'module_store' => 'module_store#index'
    match 'module_store/show' => 'module_store#show'
    match 'template_store' => 'template_store#index'
    match 'template_store/template/:id' => 'template_store#show', :as => :template_store_template

  end
  # end admin

  namespace :panel do
    resources :users
  end

  resources :desktop_widgets do
    collection do
      get 'upload'
      get 'delete'
      post 'upload'
    end
  end

  match "desktop" =>  "desktop#index"
  match "/desktop/desktop" => "desktop#desktop"
  match '/desktop/desktop'=>'desktop#desktop'
  match '/desktop/app_manager'=>'desktop#app_manager'
  match '/desktop/allsections'=>'desktop#allsections'
  match '/desktop/settings'=>'desktop#settings'
  match '/desktop/get_desktop_settings/'=>'desktop#get_desktop_settings'
  match '/desktop/save_desktop_settings/'=>'desktop#save_desktop_settings'
  match '/desktop/getgroups/'=>'desktop#getgroups'
  match '/desktop/getsectionlist/'=>'desktop#getsectionlist'
  match '/desktop/themes/'=>'desktop#themes'
  match '/desktop/sections/'=>'desktop#sections'
  match '/desktop/getapplist/'=>'desktop#getapplist'
  match '/desktop/newpositions/'=>'desktop#newpositions'
  match '/desktop/connections/'=>'desktop#connections'
  match '/desktop/widget_layout' => 'desktop#widget_layout'
  match '/desktop/temp_func/'=>'desktop#temp_func'

  # namespace :desktop_publications do
  match 'desktop_publications/books' => 'desktop_publications#books'
  match 'desktop_publications/books_list'=>'desktop_publications#books_list'
  match 'desktop_publications/books_add'=>'desktop_publications#books_add'

  # namespace :desktop_research do
  match 'desktop_research/research_d' => 'desktop_research#research_d'
  match 'desktop_research/research_d_list/' => 'desktop_research#research_d_list'
  match 'desktop_research/research_d_add' => 'desktop_research#research_d_add'

  match 'desktop_research/research_p' => 'desktop_research#research_p'
  match 'desktop_research/research_p_list/' => 'desktop_research#research_p_list'
  match 'desktop_research/research_p_add' => 'desktop_research#research_p_add'
  # end

  match '/twitter/'=>'otheraccounts#twitter'
  match '/forgmail/'=>'otheraccounts#gmail'
  match '/otheraccounts/getaccounts'=>'otheraccounts#getaccounts'
  match '/save_account_info/'=>'otheraccounts#saveaccountinfo'

  match '/desktop_appstore/appstore'=>'desktop_appstore#appstore'
  match '/desktop_appstore/onlinestore'=>'desktop_appstore#onlinestore'
  match '/desktop_appstore/widgets'=>'desktop_appstore#widgets'
  match '/desktop_appstore/getuserwidgets'=>'desktop_appstore#getuserwidgets'
  match '/desktop_appstore/widgets_settings'=>'desktop_appstore#widgets_settings'

  match '/desktop_orbit/orbit' => 'desktop_orbit#orbit'

  match '/desktop_orbit/eventajaxload'=> 'desktop_orbit#eventajaxload'
  match '/desktop_orbit/gettimelinespan' => 'desktop_orbit#gettimelinespan'


  #match '/desktop_orbit/eventajaxload' => 'desktop_publications#create_journal'
  #match '/desktop_orbit/eventajaxload' => 'desktop_publications#delete_journal'
  # match '/desktop_orbit/eventajaxload' => 'desktop_publications#update_journal'

  def controller_paths(controller, actions, scope=nil) 
    actions.each do |action| 
      if action.eql? 'index'
        match "#{controller}" => "#{controller}##{action}", :as => "#{controller}"
      else
        match "#{controller}/#{action}(/:id)" => "#{controller}##{action}", :as => "#{controller}_#{action}"
      end
    end 
  end

  controller_paths :front, %w[show_breadcrumb show_banner show_footer show_menu show_page_sub_menu show_site_sub_menu show_sitemap]
  # controller_paths :mobile, %w[index announcement announcement_content dialog_contact dialog_copyright dialog_language map page page_content]

  # scope 'app' do
  #   controller_paths :mobile, %w[index announcement announcement_content dialog_contact dialog_copyright dialog_language map page page_content]
  # end

  scope '/mobile(/:app)' do
    match '/announcement' => 'mobile#announcement', :as => 'mobile_announcement'
    match '/announcement_content/:id' => 'mobile#announcement_content', :as => 'mobile_announcement_content'
    match '/dialog_contact' => 'mobile#dialog_contact', :as => 'mobile_dialog_contact'
    match '/dialog_copyright' => 'mobile#dialog_copyright', :as => 'mobile_dialog_copyright'
    match '/dialog_language' => 'mobile#dialog_language', :as => 'mobile_dialog_language'
    match '/map' => 'mobile#map', :as => 'mobile_map'
    match '/page' => 'mobile#page', :as => 'mobile_page'
    match '/page_content/:id' => 'mobile#page_content', :as => 'mobile_page_content'
    root :to => 'mobile#index', :as => 'mobile'
  end

  match '/panel/orbit_app/widget/:type' => 'pages#index_from_link', :constraints => lambda { |request|
    request.query_string.include?("same_page_id=")
  }
  match '/panel/orbit_app/widget/:type' => 'default_widget#default_widget'


  match '/panel/:app_name/front_end/:app_action/:id(/:controller_action)' => 'pages#show_from_link', :constraints => lambda { |request|
    !request.query_string.include?("inner=true")
  }

  match '/panel/:app_name/front_end/:app_action' => 'pages#index_from_link', :constraints => lambda { |request|
    !request.query_string.include?("inner=true")
  }

  match '/share/:model/:id' => 'application#render_share'

  # routes for gridfs files
  match "/gridfs/*path" => "gridfs#serve" 

  # match "/images/*path" => "gridfs#serve_images"
  # match "/admin/pages/images/*path" => "gridfs#serve_images"

  # routes for pages to generate
  match '*page_name' => 'pages#show', :as => :page, :constraints => lambda{|request|
    !request.path.starts_with?("/panel")
  }

  root :to => 'pages#index'

  match '/panel/ad_banner/front_end/inner_page/:id' => 'front#show_inner_ad_image', :as => :front_show_inner_ad_image

end