class Supporter
  include Mongoid::Document
  include Mongoid::Timestamps
  include Mongoid::Paranoia
  include Geocoder::Model::Mongoid

  COUNTER_START = 10_003

  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  ## Database authenticatable
  field :email,              type: String, default: ''
  field :encrypted_password, type: String, default: ''
  field :admin,              type: Boolean, default: false

  ## Recoverable
  field :reset_password_token,   type: String
  field :reset_password_sent_at, type: Time

  ## Rememberable
  field :remember_created_at, type: Time

  ## Trackable
  field :sign_in_count,      type: Integer, default: 0
  field :current_sign_in_at, type: Time
  field :last_sign_in_at,    type: Time
  field :current_sign_in_ip, type: String
  field :last_sign_in_ip,    type: String

  geocoded_by :address
  after_validation :geocode          # auto-fetch coordinates

  field :first_name,    type: String
  field :last_name,     type: String
  field :street,        type: String
  field :zip,           type: Integer
  field :city,          type: String
  field :support,       type: String # Indicates the type of support
  field :li_membership, type: Boolean, default: false
  field :age_category,  type: String
  field :coordinates,   type: Array
  field :comments,      type: String
  field :language,      type: String
  field :duplicate,     type: Boolean, default: false

  validates :first_name,   presence: true
  validates :last_name,    presence: true
  validates :street,       presence: true
  validates :zip,          presence: true
  validates :city,         presence: true
  validates :email,        presence: true, uniqueness: true, format: /.+@.+\..+/i
  validates :support,      presence: true
  validates :age_category, presence: true
  validates :language,     presence: true

  embeds_one :publicity

  def self.counter
    actual = count.to_i
    actual > COUNTER_START ? actual : COUNTER_START
  end

  def address
    "#{street}, #{zip}, #{city}, Switzerland"
  end
end
