Rails.application.routes.draw do
  resources :turns do
    member do
      patch :submit_orders
      post :process_turn
    end
  end

  resources :games do
    member do
      post :join_game
      post :start_power_selection
      post :start_order_input
      post :vote_draw
      post :force_draw
      get :turn_data
    end

    resources :participants, only: [] do
      member do
        patch :select_power
      end
    end

    resources :boards, only: [ :index, :new, :create, :show ] do
      member do
        patch :toggle_public
      end
      resources :board_posts, only: [ :create ], path: "posts"
      resources :board_memberships, only: [ :create ], path: "members" do
        collection do
          delete :leave
        end
      end
      resources :board_proposals, only: [ :create, :update ], path: "proposals"
    end
  end

  # 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 "games#index"

  # Authentication routes
  get "/signup", to: "users#new"
  post "/signup", to: "users#create"
  get "/login", to: "sessions#new"
  post "/login", to: "sessions#create"
  delete "/logout", to: "sessions#destroy"

  # User management routes (admin only)
  resources :users, only: [ :index, :show, :edit, :update, :destroy ] do
    member do
      patch :toggle_admin
    end
  end
end
