module Base::Contact
  extend ActiveSupport::Concern

  include Castable

  included do
    self.table_name = 'Contact'
    self.primary_key = 'ContactID'

    cast_as_boolean :Mine

    alias_attribute :id, :ContactID
    alias_attribute :school_id, :SchoolID
    alias_attribute :author_id, :AuthorID
    alias_attribute :first_name, :FirstName
    alias_attribute :nickname, :NickName
    alias_attribute :suffix, :Suffix
    alias_attribute :last_name, :LastName
    alias_attribute :gender, :Gender
    alias_attribute :middle_name, :MiddleName
    alias_attribute :address, :Address1
    alias_attribute :address_ext, :Address2
    alias_attribute :city, :City
    alias_attribute :state, :State
    alias_attribute :zip, :Zip
    alias_attribute :work_phone, :WorkPhone
    alias_attribute :work_phone_2, :WorkPhone2
    # alias_attribute :workext, :WorkExt
    alias_attribute :home_phone, :HomePhone
    alias_attribute :fax_phone, :FaxPhone
    alias_attribute :cell_phone, :CellPhone
    alias_attribute :email, :EMail
    alias_attribute :email2, :Email2
    alias_attribute :email3, :Email3
    # alias_attribute :email4, :Email4
    alias_attribute :company_id, :CCID
    alias_attribute :title_id, :TitleID
    alias_attribute :description, :JobDescription
    alias_attribute :private, :Mine
    # alias_attribute :updated, :Updated
    # alias_attribute :note, :Note
    alias_attribute :date_of_birth, :DOB
    # alias_attribute :schoolname, :SchoolName
    # alias_attribute :schoolyear, :SchoolYear
    # alias_attribute :deleted, :Deleted
    alias_attribute :user_id, :UserID
    # alias_attribute :member, :Member
    # alias_attribute :memberrepid, :MemberRepID
    # alias_attribute :extsid, :ExtID
    alias_attribute :external_id, :ID
    alias_attribute :marital_status, :MaritalStatus
    alias_attribute :date_of_birth, :DOB

    before_create :set_defaults

    before_save do
      self.title_id = 0 if title_id.nil?
      self.marital_status = :unspecified unless marital_status
    end

    private
      def set_defaults
        self.NickName = '' unless self.NickName
        self.Address1 = '' unless self.Address1
        self.Address2 = '' unless self.Address2
        self.State = '' unless self.State
        self.Updated = '0000-00-00 00:00:00' unless self.Updated
        self.Note = '' unless self.Note
        self.DOB = '0000-00-00' unless self.DOB
        self.ID = '' unless self.ID
        self.MaritalStatus = 0 unless self.MaritalStatus
        self.AuthorID = 0 unless self.AuthorID
      end
  end
end
