<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:tpr="https://www.treffpunkt-rif.at/schema/events/v1"
           targetNamespace="https://www.treffpunkt-rif.at/schema/events/v1"
           elementFormDefault="qualified">

  <xs:annotation><xs:documentation xml:lang="de">
    Offene Termin-API des Vereins Treffpunkt Rif. Enthält ausschließlich Termindaten.
  </xs:documentation></xs:annotation>

  <xs:element name="events" type="tpr:EventsType"/>
  <xs:element name="eventDocument" type="tpr:EventDocumentType"/>

  <xs:complexType name="EventsType">
    <xs:sequence>
      <xs:element name="source" type="tpr:SourceType" minOccurs="0"/>
      <xs:element name="event" type="tpr:EventType" minOccurs="0" maxOccurs="unbounded"/>
      <xs:element name="nextCursor" type="xs:string" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="apiVersion" type="xs:string" use="required"/>
    <xs:attribute name="generatedAt" type="xs:dateTime" use="required"/>
    <xs:attribute name="timezone" type="xs:string"/>
    <xs:attribute name="count" type="xs:int"/>
    <xs:attribute name="total" type="xs:int"/>
  </xs:complexType>

  <xs:complexType name="EventDocumentType">
    <xs:sequence><xs:element name="event" type="tpr:EventType"/></xs:sequence>
    <xs:attribute name="apiVersion" type="xs:string" use="required"/>
    <xs:attribute name="generatedAt" type="xs:dateTime"/>
    <xs:attribute name="timezone" type="xs:string"/>
  </xs:complexType>

  <xs:complexType name="SourceType">
    <xs:attribute name="name" type="xs:string"/>
    <xs:attribute name="url" type="xs:anyURI"/>
  </xs:complexType>

  <xs:complexType name="EventType">
    <xs:sequence>
      <xs:element name="url" type="xs:anyURI"/>
      <xs:element name="category" minOccurs="0">
        <xs:complexType><xs:simpleContent><xs:extension base="xs:string">
          <xs:attribute name="slug" type="xs:string"/>
        </xs:extension></xs:simpleContent></xs:complexType>
      </xs:element>
      <xs:element name="tags" minOccurs="0">
        <xs:complexType><xs:sequence>
          <xs:element name="tag" minOccurs="0" maxOccurs="unbounded">
            <xs:complexType><xs:simpleContent><xs:extension base="xs:string">
              <xs:attribute name="slug" type="xs:string"/>
            </xs:extension></xs:simpleContent></xs:complexType>
          </xs:element>
        </xs:sequence></xs:complexType>
      </xs:element>
      <xs:element name="title" type="xs:string"/>
      <xs:element name="subtitle" type="xs:string" minOccurs="0"/>
      <xs:element name="teaser" type="xs:string" minOccurs="0"/>
      <xs:element name="description" minOccurs="0">
        <xs:complexType><xs:sequence>
          <xs:element name="html" type="xs:string"/>
          <xs:element name="text" type="xs:string"/>
        </xs:sequence></xs:complexType>
      </xs:element>
      <xs:element name="start" type="xs:dateTime"/>
      <xs:element name="end" type="xs:dateTime" minOccurs="0"/>
      <xs:element name="allDay" type="xs:boolean"/>
      <xs:element name="cancelReason" type="xs:string" minOccurs="0"/>
      <xs:element name="movedToUrl" type="xs:anyURI" minOccurs="0"/>
      <xs:element name="occurrences" minOccurs="0">
        <xs:complexType><xs:sequence>
          <xs:element name="occurrence" minOccurs="0" maxOccurs="unbounded">
            <xs:complexType>
              <xs:attribute name="seq" type="xs:int"/>
              <xs:attribute name="status" type="xs:string"/>
              <xs:attribute name="start" type="xs:dateTime"/>
              <xs:attribute name="end" type="xs:dateTime"/>
            </xs:complexType>
          </xs:element>
        </xs:sequence></xs:complexType>
      </xs:element>
      <xs:element name="venue" type="tpr:VenueType" minOccurs="0"/>
      <xs:element name="organizer" type="tpr:OrganizerType"/>
      <xs:element name="partner" type="tpr:PartnerType" minOccurs="0"/>
      <xs:element name="instructor" minOccurs="0">
        <xs:complexType><xs:sequence><xs:element name="name" type="xs:string"/></xs:sequence></xs:complexType>
      </xs:element>
      <xs:element name="performer" type="xs:string" minOccurs="0"/>
      <xs:element name="images" minOccurs="0">
        <xs:complexType><xs:sequence>
          <xs:element name="image" minOccurs="0" maxOccurs="unbounded">
            <xs:complexType><xs:sequence>
              <xs:element name="url" type="xs:anyURI"/>
              <xs:element name="alt" type="xs:string" minOccurs="0"/>
              <xs:element name="credit" type="xs:string" minOccurs="0"/>
            </xs:sequence></xs:complexType>
          </xs:element>
        </xs:sequence></xs:complexType>
      </xs:element>
      <xs:element name="registration" type="tpr:RegistrationType"/>
      <xs:element name="prices" type="tpr:PricesType"/>
      <xs:element name="audience" minOccurs="0">
        <xs:complexType>
          <xs:attribute name="minAge" type="xs:int"/>
          <xs:attribute name="maxAge" type="xs:int"/>
        </xs:complexType>
      </xs:element>
      <xs:element name="course" type="tpr:CourseType" minOccurs="0"/>
      <xs:element name="publishedAt" type="xs:dateTime" minOccurs="0"/>
      <xs:element name="updatedAt" type="xs:dateTime"/>
    </xs:sequence>
    <xs:attribute name="id" type="xs:string" use="required"/>
    <xs:attribute name="slug" type="xs:string" use="required"/>
    <xs:attribute name="kind" type="xs:string" use="required"/>
    <xs:attribute name="status" type="xs:string" use="required"/>
    <xs:attribute name="cancelled" type="xs:boolean"/>
    <xs:attribute name="moved" type="xs:boolean"/>
  </xs:complexType>

  <xs:complexType name="VenueType">
    <xs:sequence>
      <xs:element name="name" type="xs:string"/>
      <xs:element name="street" type="xs:string" minOccurs="0"/>
      <xs:element name="zip" type="xs:string" minOccurs="0"/>
      <xs:element name="city" type="xs:string" minOccurs="0"/>
      <xs:element name="country" type="xs:string" minOccurs="0"/>
      <xs:element name="lat" type="xs:decimal" minOccurs="0"/>
      <xs:element name="lng" type="xs:decimal" minOccurs="0"/>
      <xs:element name="note" type="xs:string" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="slug" type="xs:string"/>
  </xs:complexType>

  <xs:complexType name="OrganizerType">
    <xs:sequence>
      <xs:element name="name" type="xs:string"/>
      <xs:element name="url" type="xs:anyURI" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="isPartner" type="xs:boolean"/>
  </xs:complexType>

  <xs:complexType name="PartnerType">
    <xs:sequence>
      <xs:element name="name" type="xs:string"/>
      <xs:element name="url" type="xs:anyURI" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="slug" type="xs:string"/>
  </xs:complexType>

  <xs:complexType name="RegistrationType">
    <xs:sequence>
      <xs:element name="url" type="xs:anyURI" minOccurs="0"/>
      <xs:element name="externalUrl" type="xs:anyURI" minOccurs="0"/>
      <xs:element name="salesOpenAt" type="xs:dateTime" minOccurs="0"/>
      <xs:element name="salesCloseAt" type="xs:dateTime" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="mode" type="xs:string"/>
    <xs:attribute name="soldOut" type="xs:boolean"/>
    <xs:attribute name="waitlist" type="xs:boolean"/>
  </xs:complexType>

  <xs:complexType name="PricesType">
    <xs:sequence>
      <xs:element name="priceText" type="xs:string" minOccurs="0"/>
      <xs:element name="ticket" minOccurs="0" maxOccurs="unbounded">
        <xs:complexType><xs:sequence>
          <xs:element name="name" type="xs:string"/>
          <xs:element name="price" type="xs:decimal"/>
          <xs:element name="memberPrice" type="xs:decimal" minOccurs="0"/>
        </xs:sequence>
        <xs:attribute name="status" type="xs:string"/></xs:complexType>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="currency" type="xs:string"/>
    <xs:attribute name="isFree" type="xs:boolean"/>
  </xs:complexType>

  <xs:complexType name="CourseType">
    <xs:sequence>
      <xs:element name="weekday" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
      <xs:element name="registrationDeadline" type="xs:dateTime" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="units" type="xs:int"/>
    <xs:attribute name="unitDurationMin" type="xs:int"/>
    <xs:attribute name="minParticipants" type="xs:int"/>
  </xs:complexType>
</xs:schema>