<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           elementFormDefault="qualified"
           attributeFormDefault="unqualified">

    <xs:simpleType name="feedType">
        <xs:restriction base="xs:string">
            <xs:enumeration value="full"/>
            <xs:enumeration value="delta"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="statusType">
        <xs:restriction base="xs:string">
            <xs:enumeration value="active"/>
            <xs:enumeration value="inactive"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="businessStatusType">
        <xs:restriction base="xs:string">
            <xs:enumeration value="available"/>
            <xs:enumeration value="reserved"/>
            <xs:enumeration value="sold"/>
            <xs:enumeration value="rented"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="transactionType">
        <xs:restriction base="xs:string">
            <xs:enumeration value="sale"/>
            <xs:enumeration value="rent"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="propertyType">
        <xs:restriction base="xs:string">
            <xs:enumeration value="flat"/>
            <xs:enumeration value="house"/>
            <xs:enumeration value="land"/>
            <xs:enumeration value="commercial"/>
            <xs:enumeration value="garage"/>
            <xs:enumeration value="cottage"/>
            <xs:enumeration value="other"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:complexType name="providerType">
        <xs:sequence>
            <xs:element name="name" type="xs:string"/>
            <xs:element name="provider_id" type="xs:string"/>
            <xs:element name="feed_type" type="feedType"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="locationType">
        <xs:sequence>
            <xs:element name="region" type="xs:string" minOccurs="0"/>
            <xs:element name="city" type="xs:string"/>
            <xs:element name="district" type="xs:string" minOccurs="0"/>
            <xs:element name="street" type="xs:string" minOccurs="0"/>
            <xs:element name="house_number" type="xs:string" minOccurs="0"/>
            <xs:element name="postal_code" type="xs:string" minOccurs="0"/>
            <xs:element name="latitude" type="xs:decimal" minOccurs="0"/>
            <xs:element name="longitude" type="xs:decimal" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="areasType">
        <xs:sequence>
            <xs:element name="usable_area_m2" type="xs:decimal" minOccurs="0"/>
            <xs:element name="floor_area_m2" type="xs:decimal" minOccurs="0"/>
            <xs:element name="land_area_m2" type="xs:decimal" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="agencyType">
        <xs:sequence>
            <xs:element name="external_id" type="xs:string" minOccurs="0"/>
            <xs:element name="name" type="xs:string"/>
            <xs:element name="ico" type="xs:string" minOccurs="0"/>
            <xs:element name="website" type="xs:anyURI" minOccurs="0"/>
            <xs:element name="email" type="xs:string" minOccurs="0"/>
            <xs:element name="phone" type="xs:string" minOccurs="0"/>
            <xs:element name="logo_url" type="xs:anyURI" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="agentType">
        <xs:sequence>
            <xs:element name="external_id" type="xs:string" minOccurs="0"/>
            <xs:element name="name" type="xs:string"/>
            <xs:element name="email" type="xs:string" minOccurs="0"/>
            <xs:element name="phone" type="xs:string" minOccurs="0"/>
            <xs:element name="photo_url" type="xs:anyURI" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="imageType">
        <xs:sequence>
            <xs:element name="url" type="xs:anyURI"/>
            <xs:element name="order" type="xs:positiveInteger" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="imagesType">
        <xs:sequence>
            <xs:element name="image" type="imageType" minOccurs="1" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="offerType">
        <xs:sequence>
            <xs:element name="external_id" type="xs:string"/>
            <xs:element name="status" type="statusType"/>
            <xs:element name="business_status" type="businessStatusType" minOccurs="0"/>
            <xs:element name="updated_at" type="xs:dateTime" minOccurs="0"/>

            <xs:element name="transaction_type" type="transactionType"/>
            <xs:element name="property_type" type="propertyType"/>
            <xs:element name="disposition" type="xs:string" minOccurs="0"/>

            <xs:element name="title" type="xs:string"/>
            <xs:element name="description" type="xs:string"/>

            <xs:element name="price" type="xs:decimal" minOccurs="0"/>
            <xs:element name="currency" type="xs:string" minOccurs="0"/>
            <xs:element name="price_on_request" type="xs:boolean" minOccurs="0"/>
            <xs:element name="price_note" type="xs:string" minOccurs="0"/>

            <xs:element name="location" type="locationType"/>
            <xs:element name="areas" type="areasType" minOccurs="0"/>
            <xs:element name="energy_class" type="xs:string" minOccurs="0"/>

            <xs:element name="agency" type="agencyType" minOccurs="0"/>
            <xs:element name="agent" type="agentType" minOccurs="0"/>
            <xs:element name="images" type="imagesType" minOccurs="0"/>

            <xs:element name="video_url" type="xs:anyURI" minOccurs="0"/>
            <xs:element name="source_url" type="xs:anyURI" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="offersType">
        <xs:sequence>
            <xs:element name="offer" type="offerType" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>

    <xs:element name="glovato_feed">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="provider" type="providerType"/>
                <xs:element name="offers" type="offersType"/>
            </xs:sequence>
            <xs:attribute name="version" type="xs:string" use="required"/>
            <xs:attribute name="generated_at" type="xs:dateTime" use="required"/>
        </xs:complexType>
    </xs:element>
</xs:schema>
