class GameParticipantsController < ApplicationController
  before_action :set_game
  before_action :require_login
  before_action :require_participant, only: [:select_power]

  # POST /games/1/game_participants/select_power
  def select_power
    power_name = params[:power_name]
    
    unless power_name.present?
      redirect_to @game, alert: "国を選択してください"
      return
    end

    # 利用可能な国のリストを取得
    available_powers = get_available_powers
    
    unless available_powers.include?(power_name)
      redirect_to @game, alert: "無効な国です"
      return
    end

    # 既に選択されているかチェック
    if @game.game_participants.exists?(power: power_name)
      redirect_to @game, alert: "その国は既に選択されています"
      return
    end

    # 国を選択
    @current_participant.select_power!(power_name)
    
    # 全員が選択したかチェック
    if @game.can_start_order_input?
      redirect_to @game, notice: "国を選択しました。全員の選択が完了しました！"
    else
      redirect_to @game, notice: "国を選択しました。他のプレイヤーの選択を待っています..."
    end
  end

  private

  def set_game
    @game = Game.find(params[:game_id])
    @current_participant = current_user && @game.game_participants.find_by(user: current_user)
  end

  def require_participant
    unless @current_participant
      redirect_to @game, alert: "このゲームに参加していません"
    end
  end

  def get_available_powers
    # ディプロマシーの標準的な国
    standard_powers = %w[Austria England France Germany Italy Russia Turkey]
    
    # 既に選択されている国を除外
    selected_powers = @game.game_participants.where.not(power: nil).pluck(:power)
    
    standard_powers - selected_powers
  end
end
