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

    <!-- ROOT ELEMENT -->
    <xs:element name="schedule" type="scheduleRequestType">
    </xs:element>

    <!-- ROOT TYPE -->
    <xs:complexType name="scheduleRequestType">
        <xs:sequence>
            <xs:element type="xs:string" name="username" minOccurs="1" maxOccurs="1" />
            <xs:element type="xs:string" name="password" minOccurs="1" maxOccurs="1" />
            <xs:choice minOccurs="1" maxOccurs="1">
                <xs:element type="startScheduleType" name="startSchedule"/>
                <xs:element type="updateScheduleType" name="updateSchedule" />
                <xs:element type="showScheduleType" name="showSchedule"/>
                <xs:element type="pauseScheduleType" name="pauseSchedule"/>
                <xs:element type="continueScheduleType" name="continueSchedule"/>
                <xs:element type="cancelScheduleType" name="cancelSchedule"/>
            </xs:choice>
        </xs:sequence>
    </xs:complexType>

    <xs:simpleType name="periodUnitType">
        <xs:restriction base="xs:string">
            <xs:enumeration value="DAY" />
            <xs:enumeration value="WEEK" />
            <xs:enumeration value="MONTH" />
            <xs:enumeration value="YEAR" />
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="currencyType">
        <xs:restriction base="xs:string">
            <xs:pattern value="[A-Z][A-Z][A-Z]" />
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="amountType">
        <xs:restriction base="xs:decimal">
            <xs:fractionDigits value="2" fixed="true" />
            <xs:maxInclusive value="9999999999.99" fixed="true" />
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="scheduleDateTime">
        <xs:restriction base="xs:string">
            <xs:pattern value="\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} [A-Z]{1,5}" /> <!-- YYYY-MM-DD HH:mm:ss T, eg. "2019-12-30 23:59:59 UTC" -->
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="merchantMetaDataType">
        <xs:restriction base="xs:string">
            <xs:maxLength value="255" />
        </xs:restriction>
    </xs:simpleType>
    <xs:complexType name="startScheduleType">
        <xs:sequence>
            <xs:element type="xs:string" name="registrationId" minOccurs="1" maxOccurs="1" /> <!-- UUID of a transaction with register -->
            <xs:element type="amountType" name="amount" minOccurs="1" maxOccurs="1"/>
            <xs:element type="currencyType" name="currency" minOccurs="1" maxOccurs="1"/>
            <xs:element type="xs:unsignedInt" name="periodLength" minOccurs="1" maxOccurs="1" />
            <xs:element type="periodUnitType" name="periodUnit" minOccurs="1" maxOccurs="1" />
            <xs:element type="scheduleDateTime" name="startDateTime" minOccurs="1" maxOccurs="1" />
            <xs:element type="merchantMetaDataType" name="merchantMetaData" minOccurs="0" maxOccurs="1" />
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="updateScheduleType">
        <xs:sequence>
            <xs:element type="xs:string" name="scheduleId" minOccurs="1" maxOccurs="1" />
            <xs:element type="xs:string" name="registrationId" minOccurs="0" maxOccurs="1" />
            <xs:element type="amountType" name="amount" minOccurs="0" maxOccurs="1"/>
            <xs:element type="currencyType" name="currency" minOccurs="0" maxOccurs="1"/>
            <xs:element type="xs:unsignedInt" name="periodLength" minOccurs="0" maxOccurs="1" />
            <xs:element type="periodUnitType" name="periodUnit" minOccurs="0" maxOccurs="1" />
            <xs:element type="scheduleDateTime" name="startDateTime" minOccurs="0" maxOccurs="1" />
            <xs:element type="merchantMetaDataType" name="merchantMetaData" minOccurs="0" maxOccurs="1" />
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="showScheduleType">
        <xs:sequence>
            <xs:element type="xs:string" name="scheduleId" minOccurs="1" maxOccurs="1" />
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="pauseScheduleType">
        <xs:sequence>
            <xs:element type="xs:string" name="scheduleId" minOccurs="1" maxOccurs="1" />
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="cancelScheduleType">
        <xs:sequence>
            <xs:element type="xs:string" name="scheduleId" minOccurs="1" maxOccurs="1" />
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="continueScheduleType">
        <xs:sequence>
            <xs:element type="xs:string" name="scheduleId" minOccurs="1" maxOccurs="1" />
            <xs:element type="scheduleDateTime" name="continueDateTime" minOccurs="1" maxOccurs="1" />
        </xs:sequence>
    </xs:complexType>
</xs:schema>
