module Checkr
  class Candidate < APIResource

    attribute :first_name
    attribute :middle_name
    attribute :no_middle_name
    attribute :last_name
    attribute :email
    attribute :phone
    attribute :zipcode
    attribute :dob
    attribute :ssn
    attribute :driver_license_number
    attribute :driver_license_state
    attribute :previous_driver_license_number
    attribute :previous_driver_license_state
    attribute :copy_requested
    attribute :custom_id
    attribute :reports, :ReportList, :nested => true
    attribute_writer_alias :report_ids, :reports
    attribute :geo_ids
    attribute :documents, :DocumentList, :nested => true, :default => {}
    attribute_writer_alias :document_ids, :documents

    api_class_method :all, :get, :constructor => APIList.constructor(:Candidate)
    api_class_method :create, :post
    api_class_method :retrieve, :get, ":path/:id", :arguments => [:id]

    api_instance_method :save, :post, :default_params => :changed_attributes

    def geos
      APIList.constructor(:Geo).call(geo_ids)
    end

    def self.path
      "/v1/candidates"
    end

    APIClass.register_subclass(self, "candidate")
  end
end
