#coding=utf-8
class ContestsService
    include ApplicationHelper
    include ContestsHelper
    include ApiHelper
    include ActionView::Helpers::DateHelper

    #多个角色加入竞赛
    def join_contest_roles params,current_user
      contest = Contest.find_by_invite_code(params[:invite_code]) if params[:invite_code]
      go_contestgroup_flag = 0
      contest_id = 0

      @state = 10
      if contest
        if contest[:is_delete] == 1
          @state = 11
        elsif contest[:invite_code_halt] == 1
          @state = 14
        else
          if current_user.member_of_contest?(contest) #如果已经是成员
            @state = 3
          else
            if params[:invite_code].present?
              role_ids = params[:role]

              if role_ids.include?("15")
                member = ContestMember.new(:user_id => current_user.id)
                contest.contest_members << member
                contest_member_roles = member.contest_member_roles
                contest_member_roles << ContestMemberRole.new(:role_id => 15)
                ContestantForContest.create(:student_id => current_user.id, :contest_id => contest.id)

                # 给管理员发消息
                admins = contest_managers contest
                admins.each do |member|
                  course_join = ContestMessage.new(:user_id =>member.user_id, :contest_message_id=>current_user.id,:contest_id => contest.id,:contest_message_type=>"JoinContest", :content => role_ids, :viewed => false, :status => 2)
                  course_join.save
                end
                @state = 0
              else
                #如果已经发送过消息了,那么就要给个提示
                if AppliedContest.where(:contest_id => contest.id, :user_id => current_user.id, :status => 0).count != 0
                  @state = 7
                else
                  if role_ids.size == 1
                    AppliedContest.create(:contest_id => contest.id, :user_id => current_user.id, :role => role_ids[0], :status => 0)
                  else
                    role_ids.each do |role_id|
                      AppliedContest.create(:contest_id => contest.id, :user_id => current_user.id, :role => role_id, :status => 0)
                    end
                  end
                  @state = 6
                end
              end
            else
              @state = 1
            end
          end
        end
      else
        @state = 4
      end
      {:state => @state, :contest => contest, :go_contestgroup_flag => go_contestgroup_flag, :contest_id => contest_id}
    end
end