class TeamsController < ApplicationController
  before_filter :get_team, only: [:show, :edit, :update, :destroy, :recover]

  def index
    @teams = Team.with_teamers_num(0).search(params[:search]).paginate(per_page: 80, page: params[:page]).ordered
  end

  def show
    @teamer = Teamer.new
    @teamer.user = @user
  end

  def new
    @team = Team.new
    raise AccessError unless @team.can_create? cuser
  end

  def replace_teamer 
    redirect_to_back
  end

  def edit
    raise AccessError unless @team.can_update? cuser
  end

  def create
    @team = Team.new params[:team]
    @team.founder = cuser
    raise AccessError unless @team.can_create? cuser

    if @team.save
      flash[:notice] = t(:teams_create)
      redirect_to @team
    else
      render :new
    end
  end

  def update
    raise AccessError unless @team.can_update? cuser
    if @team.update_attributes params[:team]
      if params[:rank]
        @team.teamers.present.each do |member|
          rank = params[:rank]["#{member.id}"]
          if cuser.admin? or (rank.to_i <= cuser.teamers.active.of_team(@team).first.rank)
            if member.rank == Teamer::RANK_JOINER
              member.user.update_attribute :team, @team
            end
            member.update_attribute :rank, rank
            member.update_attribute :comment, params[:comment]["#{member.id}"]
          end
        end
      end
      flash[:notice] = t(:teams_update)
      redirect_to edit_team_path(@team)
    else
      render :edit
    end
  end

  def destroy
    raise AccessError unless @team.can_destroy? cuser
    @team.destroy
    redirect_to(teams_url)
  end

  def recover
    raise AccessError unless @team.can_destroy? cuser
    @team.recover
    redirect_to(teams_url)
  end

  private

  def get_team
    @team = Team.find params[:id]
  end
end