Rails.application.routes.draw do
  crm_path = 'admin/crm'

  get '/autocomplete/contacts'  => E9Crm::Rack::ContactAutoCompleter
  get '/autocomplete/companies' => E9Crm::Rack::CompanyAutoCompleter
  get '/users/email_test.json'  => E9Crm::Rack::EmailAvailabilityChecker

  scope :module => :e9_crm do
    resources :offers, :as => :public_offer, :only => :show do
      resources :leads, :as => :deals, :only => [:new, :create], :path => ''
    end
  end

  scope :path => crm_path, :module => :e9_crm do
    # NOTE this should be handled by base, and is here because base doesn't have a sensible
    # user api, which crm needs to check for email uniqueness errors
    resources :users, :only => :new

    resources :companies, :except => :show
    resources :contacts do
      # page_views currently not routed, but near working
      #resources :page_views, :path => 'activity', :only => :index

      collection { get :templates }
      member do
        post   :upload_avatar
        delete :reset_avatar
      end
    end

    resources :deals

    # contact_emails are generated by email templates, and end up in the sent emails list
    resources :contact_emails,  :except => [:index, :show]
    resources :email_templates do
      collection { get :select }
    end

    resources :dated_costs, :path => 'advertising_costs', :only => [:index] do
      collection do
        post :bulk_create
      end
    end

    resources :campaigns, :only  => [:index, :destroy, :new] do
      # page_views currently not routed, but near working
      #resources :page_views, :path => 'activity', :only => :index
    end
    scope :path => :campaigns do
      #get '/activity', :to => redirect("/#{crm_path}/campaigns/all/activity")
      resources :campaign_groups, :path => 'groups', :except => [:show]

      resources :sales_campaigns,       :path => 'sales',       :except => [:show, :index]
      resources :affiliate_campaigns,   :path => 'affiliate',   :except => [:show, :index]
      resources :email_campaigns,       :path => 'email',       :except => [:show, :index]
      resources :advertising_campaigns, :path => 'advertising', :except => [:show, :index] do
        resources :dated_costs,         :path => 'costs'
      end

      %w( advertising affiliate email sales ).each do |path|
        get "/#{path}", :to => redirect("/#{crm_path}/campaigns?type=#{path}")
      end
    end

    resources :offers, :except => :show

    # leads are simply a scoped view of deals (only index)
    get :leads,            :as => :leads,          :to => 'deals#leads'
    get :marketing_report,                         :to => 'campaigns#reports'

    get  '/merge_contacts/:contact_a_id/and/:contact_b_id', :as => :new_contact_merge, :to => 'contact_merges#new'
    post '/merge_contacts', :as => :contact_merges, :to => 'contact_merges#create'

    # redirect shows to edits
    %w(
      campaigns/advertising
      campaigns/affiliate
      campaigns/email
      campaigns/sales
      campaigns/groups
      deals
      email_templates
      menu_options
      offers
    ).each do |path|
      get "/#{path}/:id", :to => redirect("/#{crm_path}/#{path}/%{id}/edit"), :constraints => { :id => /\d+/ }
    end

  end
end