Rails.application.routes.draw do
  # Define your application routes per the DSL in https://guides.rubyonrails.org/routing.html

  # Reveal health status on /up that returns 200 if the app boots with no exceptions, otherwise 500.
  # Can be used by load balancers and uptime monitors to verify that the app is live.
  get "up" => "rails/health#show", as: :rails_health_check

  # Render dynamic PWA files from app/views/pwa/* (remember to link manifest in application.html.erb)
  # get "manifest" => "rails/pwa#manifest", as: :pwa_manifest
  # get "service-worker" => "rails/pwa#service_worker", as: :pwa_service_worker

  # Defines the root path route ("/")
  root "entries#index"

  # Setup route (only accessible when .installed file doesn't exist)
  get "setup", to: "setup#show"
  post "setup", to: "setup#create"

  # Authentication routes
  get "login", to: "sessions#new", as: :login
  post "login", to: "sessions#create"
  get "logout", to: "sessions#destroy", as: :logout

  # Password reset routes
  resources :password_resets, only: [ :new, :create ]
  get "password_resets/:token/edit", to: "password_resets#edit", as: :edit_password_reset
  patch "password_resets/:token", to: "password_resets#update", as: :password_reset

  # Invitation acceptance routes
  get "invitations/:token", to: "invitations#show", as: :invitation
  patch "invitations/:token/accept", to: "invitations#update", as: :accept_invitation

  # Public entry request routes
  resources :requests, only: [ :new, :create ]

  # Admin namespace
  namespace :admin do
    root "dashboard#index"
    get "dashboard", to: "dashboard#index"
    resources :users, only: [ :index, :edit, :update, :destroy ]
    resources :invitations, only: [ :index, :new, :create, :destroy ] do
      member do
        put :resend
      end
    end
    resources :requests, only: [ :index, :show, :edit, :update ] do
      member do
        post :approve
        delete :reject
      end
    end
  end

  resources :entries do
    resources :comments, only: [ :create ]
    collection do
      get :download
    end
  end
  resources :suggested_meanings
  resources :comments, only: [ :create, :update, :destroy ]
  resources :supported_languages, only: [ :index, :show ]
  resources :users
end
