class Realogy::Listing < Realogy::Entity

  # Array

  def company_names
    return nil if self.agents.nil?
    self.agents.map{|a| a.dig_for_string("office", "companyName")}.uniq
  end

  # fullBath : Integer
  # Number of full baths in the property

  def full_bath
    self.dig_for_integer("fullBath")
  end

  # halfBath : Integer
  # Number of half baths in the property

  def half_bath
    self.dig_for_integer("halfBath")
  end
  
  # quarterBath : Integer
  # Number of quarter baths in the property

  def quarter_bath
    self.dig_for_integer("quarterBath")
  end
  
  # threeQuarterBath : Integer
  # Number of three quarter baths in the property
  
  def three_quarter_bath
    self.dig_for_integer("threeQuarterBath")
  end
  
  # partialBath : Integer
  # Number of partial baths in the property
  
  def partial_bath
    self.dig_for_integer("partialBath")
  end
  
  # parkingPlaces : Integer
  # Number of parking places in the property
  
  def parking_places
    self.dig_for_integer("parkingPlaces")
  end
  
  # lotDimension : String
  # The dimensions of the Lot that the property is located in
  
  def lot_dimension
    self.dig_for_string("lotDimension")
  end
  
  # levels : Integer
  # The number of levels (or storeys) in the Property
  
  def levels
    self.dig_for_integer("levels")
  end
  
  # yearBuilt : String
  # The year in which the property was built
  
  def year_built
    self.dig_for_integer("yearBuilt")
  end
  
  # yearRenovated : String
  # The year in which the property was last renovated
  
  def year_renovated
    self.dig_for_integer("yearRenovated")
  end
  
  # totalRooms : Integer
  # Number of total rooms in the property
  
  def total_rooms
    self.dig_for_integer("totalRooms")
  end
  
  # taxRollNumber : String
  # An identifier for a property within a given jurisdiction, such as a city or county, that can be taxed
  
  def tax_roll_number
    self.dig_for_string("taxRollNumber")
  end
  
  # zoning : String
  # Property in terms of permitted usage of land based on mapped zones by the authorities
  
  def zoning
    self.dig_for_string("zoning")
  end
  
  # providerName : String
  # The name of the provider of the listing information
 
  def provider_name
    self.dig_for_string("providerName")
  end
  
  # providerCategory : String
  # The category of the provider of the listing information

  def provider_category
    self.dig_for_string("providerCategory")
  end
  
  # providerURL : String
  # The URL of the provider of the listing information
  
  def provider_url
    self.dig_for_string("providerURL")
  end
  
  # providerKey : String
  # The unique identifier for the listing in the provider's system
  
  def provider_key
    self.dig_for_string("providerKey")
  end
  
  # leadEmail : String
  # The email address that leads for this Listing should be sent to
  
  # TODO EXIST?

  def lead_email
    self.dig_for_string("leadEmail")
  end
  
  # agriculturalPropertyNumber : String
  # A unique identifier given for the agriculture property
  
  def agricultural_property_number
    self.dig_for_string("agriculturalPropertyNumber")
  end
  
  # anchorStores : String
  # The stores within the shopping complex that draw traffic to the location
  
  def anchor_stores
    self.dig_for_string("anchorStores")
  end
  
  # annualTax : Decimal
  # The annualTax associated with the listing
  
  def annual_tax
    self.dig_for_decimal("annualTax")
  end
  
  # availableFloors : Integer
  # The total number of floors available within a property's Listing
  
  def available_floors
    self.dig_for_integer("availableFloors")
  end
  
  # availableSpace : Decimal
  # The space available in the commercial property
  
  def available_space
    self.dig_for_decimal("availableSpace")
  end
  
  # averageFloorSize : Decimal
  # The size of the floor in an average. A calculation of the total building area 
  # divided by the number of stories or levels within the building
  
  def average_floor_size
    self.dig_for_decimal("averageFloorSize")
  end
  
  # averageOccupancyRate : Decimal
  # The number of units in a building that have been rented out as compared to 
  # the total number of units in the building
  
  def average_occupancy_rate
    self.dig_for_decimal("averageOccupancyRate")
  end
  
  # bayDepth : String
  # The distance from the front to the back of the bay
  
  def bay_depth
    self.dig_for_string("bayDepth")
  end
  
  # buildingClass : String
  # The Subjective quality rating of buildings which indicates the competitive 
  # ability of each building to attract similar types of tenants
  
  def building_class
    self.dig_for_string("buildingClass")
  end
  
  # capRatePercent : Decimal
  # The capitalization rate on the property in percentage
  
  def cap_rate_percent
    self.dig_for_decimal("capRatePercent")
  end
  
  # cashFlow : Decimal
  # The amount of cash flow the property brings in if its on sale
  
  def cash_flow
    self.dig_for_decimal("cashFlow")
  end
  
  # ceilingHeight : String
  # The distance from the floor to the lowest hanging ceiling member or 
  # hanging objects of the industrial work area
  
  def ceiling_height
    self.dig_for_string("ceilingHeight")
  end
  
  # clearance : String
  # The distance from the floor to the lowest hanging ceiling member or 
  # hanging objects, beams, joists or truss work descending down into a 
  # substantial portion of the industrial work area
  
  def clearance
    self.dig_for_string("clearance")
  end
  
  # columnSpacing : String
  # The distance between posts or vertical supporting beams in an industrial building
  
  def column_spacing
    self.dig_for_string("columnSpacing")
  end
  
  # commonAreaFactor : Decimal
  # The shared spaces on a single floor, and within a building in its entirety
  
  def common_area_factor
    self.dig_for_decimal("commonAreaFactor")
  end
  
  # dockHeight : String
  # The amount of distance the height of the slab at the bottom of an overhead door is from the ground level
  
  def dock_height
    self.dig_for_string("dockHeight")
  end
  
  # downPayment : Decimal
  # The down payment required by the current owner for a commercial listing
  
  def down_payment
    self.dig_for_decimal("downPayment")
  end
  
  # fullyLeasedIncome : Decimal
  # The income that the owner currently receives if the property is fully leased
  
  def fully_leased_income
    self.dig_for_decimal("fullyLeasedIncome")
  end
  
  # grossIncome : Decimal
  # The gross income that the owner currently receives if the property is fully leased
  
  def gross_income
    self.dig_for_decimal("grossIncome")
  end
  
  # hasRailAccess : Boolean
  # Indicates whether the property has the industrial rail access to it
  
  def has_rail_access?
    self.dig_for_boolean("hasRailAccess")
  end
  
  # isAllowMapping : Boolean
  # Indicates whether or not the property address should be displayed on a map
  
  def mapping_allowed?
    self.dig_for_boolean("isAllowMapping")
  end
  
  # isCrossDocks : Boolean
  # Indicates whether the property has the CrossDocks associated with it
  
  def has_cross_docks?
    self.dig_for_boolean("isCrossDocks")
  end
  
  # isGroundLevel : Boolean
  # The Industrial ground level of the property
  
  def ground_level?
    self.dig_for_boolean("isGroundLevel")
  end
  
  # isSprinkler : Boolean
  # Indicates whether property has the industrial sprinkler to it
  
  def has_sprinkler?
    self.dig_for_boolean("isSprinkler")
  end
  
  # isSubLease : Boolean
  # The value indicating whether the listing is a sublease
  
  def sub_lease?
    self.dig_for_boolean("isSubLease")
  end
  
  # leaseTerm : String
  # Indicates the Measurement. List price or Lease rate or rental value at which the sub unit is available
  
  def lease_term
    self.dig_for_string("leaseTerm")
  end
  
  # leaseType : String
  # The type of lease for a listing
  
  def lease_type
    self.dig_for_string("leaseType")
  end
  
  # loanPayment : Decimal
  # The current loan payment value on the property being paid by the owner
  
  def loan_payment
    self.dig_for_decimal("loanPayment")
  end
  
  # maxContiguousArea : Decimal
  # The largest amount of open space available in a commercial building
  
  def max_contiguous_area
    self.dig_for_decimal("maxContiguousArea")
  end
  
  # maximumLeaseRate : Decimal
  # The Maximum Lease Rate associated with the listing
  
  def maximum_lease_rate
    self.dig_for_decimal("maximumLeaseRate")
  end
  
  # minDivisibleArea : Decimal
  # The minimum space which can be leased
  
  def min_divisible_area
    self.dig_for_decimal("minDivisibleArea")
  end
  
  # minimumLeaseRate : Decimal
  # The Minimum Lease Rate associated with the listing
  
  def minimum_lease_rate
    self.dig_for_decimal("minimumLeaseRate")
  end
  
  # netOperatingIncome : Decimal
  # The potential rental income plus other income, less vacancy, credit losses, and operating expenses
  
  def net_operating_income
    self.dig_for_decimal("netOperatingIncome")
  end
  
  # numberOfDocks : Integer
  # The Number of Docks associated with the property
  
  def number_of_docks
    self.dig_for_integer("numberOfDocks")
  end
  
  # numberOfBallrooms : Integer
  # The number of ballrooms in a property
  
  def number_of_ballrooms
    self.dig_for_integer("numberOfBallrooms")
  end
  
  # numberOfConferenceRooms : Integer
  # The number of conference rooms in a property
  
  def number_of_conference_rooms
    self.dig_for_integer("numberOfConferenceRooms")
  end
  
  # occupancyRate : Integer
  # The number of units in a building that have been rented out 
  # as compared to the total number of units in the building
  
  def occupancy_rate
    self.dig_for_integer("occupancyRate")
  end
  
  # parkingRatio : Decimal
  # The ratio of available standard parking spaces to the gross leasable area of a property
  
  def parking_ratio
    self.dig_for_decimal("parkingRatio")
  end
  
  # power : String
  # The type and voltage of power applicable for the property
  
  def power
    self.dig_for_string("power")
  end
  
  # pricePerArea : Decimal
  # The price per area of the property, this is generally the list price divided by the area
  
  def price_per_area
    self.dig_for_decimal("pricePerArea")
  end
  
  # scheduleIncome : Decimal
  # The gross income that would be collected from a rental property with all units 100% occupied and rented
  
  def schedule_income
    self.dig_for_decimal("scheduleIncome")
  end
  
  # suiteApartmentName : String
  # The Suite Apartment Name associated with the listing
  
  def suite_apartment_name
    self.dig_for_string("power")
  end
  
  # taxIdNumber : String
  # The Tax Id Number associated with the listing
  
  def tax_id_number
    self.dig_for_string("taxIdNumber")
  end
  
  # taxYear : Integer
  # The year in which tax was calculated
  
  def tax_year
    self.dig_for_integer("taxYear")
  end
  
  # totalExpenses : Decimal
  # The Total Expenses associated with the listing
  
  def total_expenses
    self.dig_for_decimal("totalExpenses")
  end
  
  # totalUnits : Integer
  # The Total Units associated with the listing
  
  def total_units
    self.dig_for_integer("totalUnits")
  end
  
  # turningRadius : String
  # The available turning radius available in the industrial property. Turning radius is the 
  # size of smallest possible circular turn a vehicle is able to take
  
  def turning_radius
    self.dig_for_string("turningRadius")
  end
  
  # linkedOffice : Hash
  # The Realogy office associated with the Non Realogy Listing. This field will be present 
  # only in case the caller is allowed to view the linked office
  
  # TODO EXIST?

  def linked_office
    self.dig_for_hash("linkedOffice")
  end
  
  # propertyFeatures : Array
  # Collection of features for the property
  
  def property_features
    self.dig_for_array("propertyFeatures")
  end
  
  def has_open_house?
    self.open_house.present?
  end

  # openHouse : [Hash]
  # Collection of OpenHouses for the property
  
  def open_house
    self.dig_for_array("openHouse")
  end
  
  # remarks : Array
  # Collection of remarks for the property
  
  def remarks
    self.dig_for_array("remarks")
  end
  
  # propertyFees : Array
  # Collection of property fees
  
  def property_fees
    self.dig_for_array("propertyFees")
  end
  
  # webSites : Array
  # Collection of websites for the property
  
  def websites
    self.dig_for_array("webSites")
  end
  
  # media : Array
  # Collection of media for this property
  
  def media
    self.dig_for_array("media")
  end
  
  # schools : Array
  # Collection of schools for the property

  # TODO blank strings in returned hash

  def schools
    self.dig_for_array("schools")
  end
  
  # propertyRooms : Array
  # Collection of propertyRooms for the property
  
  def property_rooms
    self.dig_for_array("propertyRooms")
  end
  
  # propertyFloors : Array
  # Collection of property floors for the property
  
  def property_floors
    self.dig_for_array("propertyFloors")
  end
  
  # floors : Array
  # Collection of floors for the property
  
  def floors
    self.dig_for_array("floors")
  end
  
  # subUnits : Array
  # Collection of sub units for the property

  def sub_units
    self.dig_for_array("subUnits")
  end
  
  # suites : Array
  # Collection of sub units/suites for the property
  
  def suites
    self.dig_for_array("suites")
  end
  
  # mlsInformation : Array
  # Collection of MLS information for the property
  
  def mls_information
    self.dig_for_array("mlsInformation")
  end
  
  # taxInformation : Array
  # Tax information associated with the Property

  def tax_information
    self.dig_for_array("taxInformation")
  end
  
  # listingSummary
  
  #   listingId : String
  #   Globally unique identifier assigned to a listing by Realogy
  
  def listing_id
    self.dig_for_string("listingSummary", "listingId")
  end
  
  #   isActive : Boolean
  #   Will be 'true' if this is an Active listing
  
  def active?
    self.dig_for_boolean("listingSummary", "isActive")
  end
  
  #   isPending : Boolean
  #   Will be 'true' if this is presently Under Contract (Pending)
  
  def pending?
    self.dig_for_boolean("listingSummary", "isPending")
  end
  
  #   listingType : String
  #   The type of Listings you are interested in. It can be ForSale, ForRent, 
  #   ForSaleCommercial and ForLeaseCommercial.
  
  def listing_type
    self.dig_for_string("listingSummary", "listingType")
  end
  
  #   listedOn : String
  #   The date when the Listing became active
  
  def listed_on
    self.dig_for_string("listingSummary", "listedOn")
  end
  
  #   photoCount : Integer
  #   Number of photos associated with listing
  
  def photo_count
    self.dig_for_integer("listingSummary", "photoCount")
  end
  
  #   videoCount : Integer
  #   Number of videos associated with listing
  
  def video_count
    self.dig_for_integer("listingSummary", "videoCount")
  end
  
  #   listPrice
  
  def list_price
    self.dig_for_hash("listingSummary", "listPrice")
  end
  
  def list_price_amount
    self.dig_for_integer("listingSummary", "listPrice", "amount")
  end

  def list_price_currency_code
    self.dig_for_string("listingSummary", "listPrice", "currencyCode")
  end
  
  def list_price_in_usd
    self.dig_for_integer("listingSummary", "listPrice", "listPriceinUSD")
  end
  
  def price_upon_request?
    self.dig_for_boolean("listingSummary", "listPrice", "isPriceUponRequest")
  end
  
  #   propertyAddress

  def property_address
    self.dig_for_hash("listingSummary", "propertyAddress")
  end
  
  def city
    self.dig_for_string("listingSummary", "propertyAddress", "city")
  end
  
  def country
    self.dig_for_string("listingSummary", "propertyAddress", "country")
  end

  def district
    self.dig_for_string("listingSummary", "propertyAddress", "district")
  end

  def latitude
    self.dig_for_decimal("listingSummary", "propertyAddress", "latitude")
  end

  def longitude
    self.dig_for_decimal("listingSummary", "propertyAddress", "longitude")
  end

  def postal_code
    self.dig_for_string("listingSummary", "propertyAddress", "postalCode")
  end

  def country_code
    self.dig_for_string("listingSummary", "propertyAddress", "countryCode")
  end

  def state_province
    self.dig_for_string("listingSummary", "propertyAddress", "stateProvince")
  end

  def street_address
    self.dig_for_string("listingSummary", "propertyAddress", "streetAddress")
  end

  def formatted_address
    self.dig_for_string("listingSummary", "propertyAddress", "formattedAddress")
  end
  
  def state_province_code
    self.dig_for_string("listingSummary", "propertyAddress", "stateProvinceCode")
  end
  
  def geocode_confidence_level
    self.dig_for_string("listingSummary", "propertyAddress", "geoCodeConfidenceLevel")
  end
  
  #   geographicRegions : [Hash]
  #   A collection of geographic regions associated with the location of the property
  
  def geographic_regions
    self.dig_for_array("listingSummary", "geographicRegions")
  end
  
  #   mlsNumbers : [String]
  #   A collection of MLS numbers associated with the Listing
  
  def mls_numbers
    self.dig_for_array("listingSummary", "mlsNumbers")
  end
  
  #   RFGListingId : String
  #   A short unique identifier assigned to the Listing by Realogy
  
  def rfg_listing_id
    self.dig_for_string("listingSummary", "RFGListingId")
  end
  
  #   isNewConstruction : Boolean
  #   Will be 'true' if the Property is a new construction
  
  def new_construction?
    self.dig_for_boolean("listingSummary", "isNewConstruction")
  end
  
  #   listingURL : String
  #   Public URL where the listing can be accessed
  
  def listing_url
    self.dig_for_string("listingSummary", "listingURL")
  end
  
  #   development : String
  #   The name of the Development that the property is located in
  
  def development
    self.dig_for_string("listingSummary", "development")
  end
  
  #   rentalFrequency : String
  #   The frequency at which the Rental amount is to be paid
  
  def rental_frequency
    self.dig_for_string("listingSummary", "rentalFrequency")
  end
  
  #   isCallToShow : Boolean
  #   Will be 'true' if a prospective buyer or agent has to contact the Seller 
  #   to schedule an appoinment to view the Property
  
  def call_to_show?
    self.dig_for_boolean("listingSummary", "isCallToShow")
  end
  
  #   isForAuction : Boolean
  #   Will be 'true' if this property is being sold by Auction
  
  def is_for_auction?
    self.dig_for_boolean("listingSummary", "isForAuction")
  end
  
  #   isHideListPrice : Boolean
  #   Will be 'true' if the list price is not supposed to be shown on consumer site
  
  def hide_list_price?
    self.dig_for_boolean("listingSummary", "isHideListPrice")
  end
  
  #   isByAppointmentOnly : Boolean
  #   Will be 'true' if a prospective buyer or agent has to contact the Seller 
  #   to schedule an appoinment to view the Property
  
  def by_appointment_only?
    self.dig_for_boolean("listingSummary", "isByAppointmentOnly")
  end
  
  #   propertyCategory : String
  #   Category of property
  
  def property_category
    self.dig_for_string("listingSummary", "propertyCategory")
  end
  
  #   propertyType : String
  #   Property Type
  
  def property_type
    self.dig_for_string("listingSummary", "propertyType")
  end
  
  #   propertyStyle : String
  #   Property Style
  
  def property_style
    self.dig_for_string("listingSummary", "propertyStyle")
  end
  
  #   propertyUse : String
  #   Property Use information of the property
  
  def property_use
    self.dig_for_string("listingSummary", "propertyUse")
  end
  
  #   propertyName : String
  #   Name of Property
  
  def property_name
    self.dig_for_string("listingSummary", "propertyName")
  end
  
  #   totalBath : Integer
  #   Number of partial baths in the property
  
  def total_bath
    self.dig_for_integer("listingSummary", "totalBath")
  end
  
  #   lotSize : String
  #   Lot size of the property
  
  def lot_size
    self.dig_for_string("listingSummary", "lotSize")
  end
  
  #   noOfBedrooms : Integer
  #   Number of bedrooms in the property
  
  def no_of_bedrooms
    self.dig_for_integer("listingSummary", "noOfBedrooms")
  end
  
  #   totalAcres : String
  #   Total Acres of the property
  
  def total_acres
    self.dig_for_string("listingSummary", "totalAcres")
  end
  
  #   squareFootage : Double
  #   Square Footage of the property
  
  def square_footage
    self.dig_for_decimal("listingSummary", "squareFootage")
  end
  
  #   defaultPhotoURL : String
  #   URL to the default photo for the property
  
  def default_photo_url
    self.dig_for_string("listingSummary", "defaultPhotoURL")
  end
  
  #   isForeClosure : Boolean
  #   Indicates if the property is for foreclosure
  
  def is_foreclosure?
    self.dig_for_boolean("listingSummary", "isForeClosure")
  end
  
  #   isShortSale : Boolean
  #   Indicates if the property is for short sale
  
  def is_short_sale?
    self.dig_for_boolean("listingSummary", "isShortSale")
  end
  
  #   lastUpdateOn : DateTime
  #   Timestamp when the listing was last updated at Realogy system
  
  def last_update_on
    self.dig_for_datetime("listingSummary", "lastUpdateOn")
  end
  
  #   lastSoldOn : DateTime
  #   Timestamp on which the property is previously sold
  
  def last_sold_on
    self.dig_for_datetime("lastSoldOn")
  end
  
  #   agents : [Hash]
  #   The agent(s) associated with the Listing
  
  def agents
    self.dig_for_array("listingSummary", "agents")
  end
  
  #   team : Hash
  #   The team associated with the Listing
  
  def team
    self.dig_for_hash("listingSummary", "team")
  end
  
  #   isShowAddressOnInternet : Boolean
  #   Will be 'true' if  the property address shall be displayed on Internet
  
  def show_address_on_internet?
    self.dig_for_boolean("listingSummary", "isShowAddressOnInternet")
  end
  
  #   buildingArea : String
  #   BuildingArea  of the property
  
  def building_area
    self.dig_for_string("listingSummary", "buildingArea")
  end
  
end