# frozen_string_literal: true

require "sidekiq/web"

Sidekiq::Web.use Rack::Auth::Basic do |username, password|
  (username == ENV.fetch("SIDEKIQ_USERNAME")) & (password == ENV.fetch("SIDEKIQ_PASSWORD"))
end

HealthCheck = lambda { |_env| [ 200, {}, ["OK\n"] ] }

Rails.application.routes.draw do

  mount HealthCheck => "__healthcheck__"

  mount Sidekiq::Web => "/sidekiq"

  root to: "pages#show"

  get "/sitemap" => "sitemap#index"
  get "/robots.:format" => "pages#robots"

  # set cookie from aaa
  get "/after-login" => "sessions#after_login", as: "after_login"
  match "/sign_out" => "sessions#destroy", via: [:get, :delete]
  match "/logout"   => "sessions#destroy", via: [:get, :delete]
  get "/fake-login" => "sessions#fake_login" if Rails.env.development? || Rails.env.test? || ENV["AAA_FAKE_MODE"] == "true"

  # blog
  resources :blog, only: [:index]
  get "blog/resources" => "blog#resources"
  get "blog/category/:category_name" => "blog#category"
  get "blog/:blog_post_slug" => "blog#show"

  # tracking link url shortener
  get "r/:slug" => "tracking_link_redirects#redirect", as: "tracking_link_redirect"

  # job postings
  get "job_posts/:id" => "job_posts#show"

  # webinars
  get "/webinars/:url/register"         => "webinars#register"
  get "/webinars/:url/thank-you"        => "webinars#thank_you"
  get "/webinars/:url/play"             => "webinars#play", as: :live_play
  get "/webinars/:url/play/:session_id" => "webinars#automated_play", as: :automated_play
  get "/webinars/:url/replay"           => "webinars#replay"

  # content downloads
  get "get/:landing_page_slug" => "content_downloads#landing_page"
  get "get/:landing_page_slug/thank-you" => "content_downloads#thank_you"

  # create an account
  get "/create-account"                     => "create_accounts#create"

  # public api
  namespace :api, defaults: { format: :json } do
    get  "/current_ip"                      =>  "/api/topmind#show"
    post "/sales_tax",                      to: "/api/sales_tax#check"
    post "/login/validate"                  =>  "/api/sessions#validate"
    post "/login/check_account"             =>  "/api/sessions#check_account"
    post "/register_account"                =>  "/api/registrations#create"
    post "/register_token"                  =>  "/api/iterable#register_token"
    post "/iterable"                        =>  "/api/iterable#send_email"
    post "/send_iterable_event"             =>  "/api/iterable#send_event"
    get  "/subscription_preferences"        =>  "/api/iterable#subscription_preferences"
    post "/update_subscription_preferences" =>  "/api/iterable#update_subscription_preferences"
    get  "/event_series_schedule/:id"       =>  "/api/public_event_series#schedule_partial"
    get  "/event_series_schedule_full/:id"  =>  "/api/public_event_series#schedule_full"
    resources :registrants, only: [:create]
    get "/check_email", to: "/api/summits#check_email"
  end

  namespace :admin do
    get "/" => "/admin/pages#index"
    resources :banners, only: [:index, :show]
    resources :blog_posts, only: [:index, :show]
    get "blog_posts/:id/preview" => "/admin/blog_posts#preview"
    resources :content_downloads, only: [:index, :show]
    get "content_downloads/:id/preview/:preview_entity" => "/admin/content_downloads#preview"
    resources :event_series, only: [:index, :show]
    resources :features, only: [:show]
    get "/objects" => "/admin/objekts#index"
    get "/objects/:id" => "/admin/objekts#show"
    resources :pages, only: [:index, :show]
    get "/pages/:id/preview" => "/admin/pages#preview"
    resources :partials, only: [:index, :show]
    resources :plans, only: [:index]
    resources :redirects, only: [:index, :show]
    resources :scheduled_tasks, only: [:index, :show]
    resources :templates, only: [:index, :show]
    get "/templates/:id/all" => "/admin/objekts#all"
    resources :tooltips, only: [:show]
    get "/tracking_links/copy" => "/admin/tracking_links#copy"
    resources :tracking_links, only: [:index, :new]
    get "/tracking_links/:slug" => "/admin/tracking_links#show"
    resources :users, only: [:index, :show]
    resources :webinars, only: [:index, :show]
    resources :webinar_offers, only: [:show]
    get "/webinars/:id/chat" => "/admin/webinars#chat"

    namespace :api do
      resources :users, only: [:index, :new, :create, :show, :update, :destroy]
      get "/users/:id/privileges" => "/admin/api/users#user_privileges"
      patch "/users/:id/update_password" => "/admin/api/users#update_password"
      resources :uploads, only: [:create, :update]
      get "/uploads/reusable_index" => "/admin/api/uploads#reusable_index"
      get "/templates/:id/all" => "/admin/api/objekts#all"
      resources :templates, except: [:new, :edit]
      resources :objekts, only: [:create, :show, :update, :destroy]
      resources :plans, only: [:index, :update]
      resources :features, only: [:index, :create, :show, :update, :destroy]
      resources :plan_features, only: [:index, :create, :update, :destroy]
      post "/plan_features/rearrange" => "/admin/api/plan_features#rearrange"
      resources :tooltips, only: [:index, :create, :show, :update, :destroy]
      resources :pages, only: [:index, :create, :show, :update, :destroy]
      post "/event_series/:id/webinars/:webinar_id" => "/admin/api/event_series#add_webinar"
      delete "/event_series/:id/webinars/:webinar_id" => "/admin/api/event_series#remove_webinar"
      resources :event_series
      get "/partials/pages" => "/admin/api/partials#pages"
      resources :partials, only: [:index, :create, :show, :update, :destroy]
      resources :page_partials, only: [:index, :create, :show, :update, :destroy]
      post "/page_partials/rearrange" => "/admin/api/page_partials#rearrange"
      post "/page_partials/copy" => "/admin/api/page_partials#copy"
      post "/page_partials/create_nested" => "/admin/api/page_partials#create_nested"
      delete "/page_partials/delete_nested/1" => "/admin/api/page_partials#destroy_nested"
      resources :redirects, only: [:index, :create, :show, :update, :destroy]
      post "/webinars/upload_replay" => "webinars#upload_replay"
      resources :webinars, only: [:index, :create, :show, :update, :destroy]
      post "/webinars/:id" => "/admin/api/webinars#copy"
      resources :blog_posts, only: [:index, :create, :show, :update, :destroy]
      get "/blog_settings" => "/admin/api/blog#settings"
      post "/blog_settings" => "/admin/api/blog#update_settings"
      resources :content_downloads, only: [:index, :new, :create, :show, :update, :destroy]
      resources :webinar_objects, only: [:create, :destroy]
      post "/webinar_objects/rearrange" => "/admin/api/webinar_objects#rearrange"
      resources :webinar_offers, only: [:create, :show, :update, :destroy]
      resources :scheduled_tasks, only: [:index, :new, :create, :show, :update, :destroy]
      resources :banners, only: [:index, :new, :create, :show, :update, :destroy]
      resources :banner_pages, only: [:create, :destroy]
      resources :banner_webinars, only: [:create, :destroy]
      get "/tracking_links/copy" => "/admin/api/tracking_links#copy"
      get "/tracking_links/export" => "/admin/api/tracking_links#export"
      get "/tracking_links/test" => "/admin/api/tracking_links#test"
      resources :tracking_links, only: [:index, :new, :create, :show, :update, :destroy]
      resources :transcripts, only: [:index]
      resources :jobs, only: [:show]

      namespace :check_delete do
        get "/webinars/:id" => "/admin/api/check_delete#webinars"
        get "/objekts/:id" => "/admin/api/check_delete#objekts"
        get "/partials/:id" => "/admin/api/check_delete#partials"
        get "/templates/:id" => "/admin/api/check_delete#templates"
        get "/content_downloads/:id" => "/admin/api/check_delete#content_downloads"
        get "/tracking_links/:id" => "/admin/api/check_delete#tracking_links"
      end
    end
  end

  scope module: "teachable", path: "staff" do
    namespace :api do
      namespace :v1 do
        get "/registrants", to: "registrants#index"
        get "/bonuses", to: "bonuses#index"
        get "/webinars", to: "webinars#index"
        get    "/data_access",  to: "data_access#show"
        delete "/data_erasure", to: "data_erasure#destroy"
      end
    end
  end

  scope module: "teachable", path: "replays" do
    namespace :api do
      get "/webinars", to: "webinars#replay_notification"
    end
  end

  # zeachable test routes
  if Rails.env.test?
    post "/school_sign_ups"    => "tests#school_sign_ups"
    get "/school_sign_ups/:id" => "tests#coupon_or_poll"
    get "/school_plans"        => "tests#coupon_or_poll"
    get "/check_email"         => "tests#check_email"
  end

  # pages
  get "/*page" => "pages#show"

end
