class ContestMember < ActiveRecord::Base
  attr_accessible :is_collect, :user_id, :contest_id

  belongs_to :user
  belongs_to :contest

  belongs_to :principal, :foreign_key => 'user_id'
  has_many :contest_member_roles, :dependent => :destroy
  has_many :roles, :through => :contest_member_roles

  validates_presence_of :principal
  validates_uniqueness_of :user_id, :scope => [:contest_id]
  #validate :validate_role

  def deletable?
    user != contest.user
  end

  def role
  end

  def role=
  end

  def name
    self.user.name
  end

  # alias :base_role_ids= :role_ids=
  # def role_ids=(arg)
  #   ids = (arg || []).collect(&:to_i) - [0]
  #
  #   new_role_ids = ids - role_ids
  #   if (new_role_ids.include?(14) || new_role_ids.include?(13)) && role_ids.include?(15)
  #     contest_member_roles.where("role_id = 15").first.update_column('is_current', 0)
  #   end
  #   # Add new roles
  #   if new_role_ids.include?(14) && new_role_ids.include?(13)
  #     contest_member_roles << ContestMemberRole.new(:role_id => 14)
  #     contest_member_roles << ContestMemberRole.new(:role_id => 15, :is_current => 0)
  #   elsif new_role_ids.include?(13) && new_role_ids.include?(15)
  #     contest_member_roles << ContestMemberRole.new(:role_id => 13)
  #     contest_member_roles << ContestMemberRole.new(:role_id => 15, :is_current => 0)
  #   else
  #     new_role_ids.each {|id| contest_member_roles << ContestMemberRole.new(:role_id => id) }
  #   end
  #   # Remove roles (Rails' #role_ids= will not trigger MemberRole#on_destroy)
  #   member_roles_to_destroy = contest_member_roles.select {|mr| !ids.include?(mr.role_id)}
  #   if member_roles_to_destroy.any?
  #     member_roles_to_destroy.each(&:destroy)
  #   end
  # end

  protected

  def validate_role
    errors.add_on_empty :role if contest_member_roles.empty? && roles.empty?
  end
end