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

  <xs:element name="account" type="account"/>

  <xs:element name="accountList" type="accountList"/>

  <xs:element name="application" type="application"/>

  <xs:element name="applicationList" type="applicationList"/>

  <xs:element name="device" type="device"/>

  <xs:element name="deviceList" type="deviceList"/>

  <xs:element name="deviceTag" type="deviceTag"/>

  <xs:element name="deviceTags" type="deviceTagList"/>

  <xs:element name="devices" type="notificationRequestDeviceList"/>

  <xs:element name="notification-content" type="notificationContent"/>

  <xs:element name="notificationRequest" type="notificationRequest"/>

  <xs:element name="notificationRequestList" type="notificationRequestList"/>

  <xs:element name="scheduleItems" type="scheduleItemList"/>

  <xs:element name="user" type="user"/>

  <xs:element name="userList" type="userList"/>

  <xs:complexType name="account">
    <xs:sequence>
      <xs:element name="name" type="xs:string" minOccurs="0"/>
      <xs:element name="sentThisMonth" type="xs:long" minOccurs="0"/>
      <xs:element name="isActive" type="xs:boolean" minOccurs="0"/>
      <xs:element name="ccType" type="xs:string" minOccurs="0"/>
      <xs:element name="ccNumber" type="xs:string" minOccurs="0"/>
      <xs:element name="ccName" type="xs:string" minOccurs="0"/>
      <xs:element name="ccExpirationDate" type="xs:string" minOccurs="0"/>
      <xs:element name="ccCode" type="xs:string" minOccurs="0"/>
      <xs:element name="ccPaymentResponse" type="xs:string" minOccurs="0"/>
      <xs:element name="billingAddress1" type="xs:string" minOccurs="0"/>
      <xs:element name="billingAddress2" type="xs:string" minOccurs="0"/>
      <xs:element name="billingCity" type="xs:string" minOccurs="0"/>
      <xs:element name="billingState" type="xs:string" minOccurs="0"/>
      <xs:element name="billingPostalCode" type="xs:string" minOccurs="0"/>
      <xs:element name="billingCountry" type="xs:string" minOccurs="0"/>
      <xs:element name="billingPhone" type="xs:string" minOccurs="0"/>
      <xs:element name="billingFax" type="xs:string" minOccurs="0"/>
      <xs:element name="redemptionCode" type="xs:string" minOccurs="0"/>
      <xs:element name="lastModifiedOn" type="xs:dateTime" minOccurs="0"/>
      <xs:element name="createdOn" type="xs:dateTime" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="id" type="xs:long"/>
  </xs:complexType>

  <xs:complexType name="accountRef">
    <xs:sequence>
      <xs:element name="createdOn" type="xs:dateTime" minOccurs="0"/>
      <xs:element name="isActive" type="xs:boolean" minOccurs="0"/>
      <xs:element name="lastModifiedOn" type="xs:dateTime" minOccurs="0"/>
      <xs:element name="name" type="xs:string" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="href" type="xs:string"/>
    <xs:attribute name="id" type="xs:long"/>
  </xs:complexType>

  <xs:complexType name="accountList">
    <xs:sequence>
      <xs:element name="account-ref" type="accountRef" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:attribute name="count" type="xs:int" use="required"/>
  </xs:complexType>

  <xs:complexType name="application">
    <xs:sequence>
      <xs:element name="name" type="xs:string" minOccurs="0"/>
      <xs:element name="devCertificate" type="xs:base64Binary" minOccurs="0"/>
      <xs:element name="devCertPassword" type="xs:string" minOccurs="0"/>
      <xs:element name="devCertStatus" type="certificateStatus" minOccurs="0"/>
      <xs:element name="prodCertificate" type="xs:base64Binary" minOccurs="0"/>
      <xs:element name="prodCertPassword" type="xs:string" minOccurs="0"/>
      <xs:element name="prodCertStatus" type="certificateStatus" minOccurs="0"/>
      <xs:element name="isActive" type="xs:boolean" minOccurs="0"/>
      <xs:element name="lastModifiedOn" type="xs:dateTime" minOccurs="0"/>
      <xs:element name="createdOn" type="xs:dateTime" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="id" type="xs:long"/>
  </xs:complexType>

  <xs:complexType name="applicationRef">
    <xs:sequence>
      <xs:element name="isActive" type="xs:boolean"/>
      <xs:element name="createdOn" type="xs:dateTime" minOccurs="0"/>
      <xs:element name="lastModifiedOn" type="xs:dateTime" minOccurs="0"/>
      <xs:element name="name" type="xs:string" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="href" type="xs:string"/>
    <xs:attribute name="id" type="xs:long"/>
  </xs:complexType>

  <xs:complexType name="applicationList">
    <xs:sequence>
      <xs:element name="application-ref" type="applicationRef" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:attribute name="count" type="xs:int" use="required"/>
  </xs:complexType>

  <xs:complexType name="device">
    <xs:sequence>
      <xs:element name="id" type="xs:long" minOccurs="0"/>
      <xs:element name="token" type="xs:base64Binary" minOccurs="0"/>
      <xs:element name="userName" type="xs:string" minOccurs="0"/>
      <xs:element name="isActive" type="xs:boolean"/>
      <xs:element ref="deviceTags"/>
      <xs:element name="lastModifiedOn" type="xs:dateTime" minOccurs="0"/>
      <xs:element name="createdOn" type="xs:dateTime" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="deviceTagList">
    <xs:sequence>
      <xs:element ref="deviceTag" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:attribute name="count" type="xs:int" use="required"/>
  </xs:complexType>

  <xs:complexType name="deviceTag">
    <xs:sequence>
      <xs:element name="applicationID" type="xs:long" minOccurs="0"/>
      <xs:element name="category" type="xs:string" minOccurs="0"/>
      <xs:element name="tag" type="xs:string" minOccurs="0"/>
      <xs:element name="lastModifiedOn" type="xs:dateTime" minOccurs="0"/>
      <xs:element name="createdOn" type="xs:dateTime" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="id" type="xs:long"/>
  </xs:complexType>

  <xs:complexType name="deviceRef">
    <xs:sequence>
      <xs:element name="isActive" type="xs:boolean"/>
      <xs:element name="createdOn" type="xs:dateTime" minOccurs="0"/>
      <xs:element name="lastModifiedOn" type="xs:dateTime" minOccurs="0"/>
      <xs:element name="token" type="xs:base64Binary" minOccurs="0"/>
      <xs:element name="userName" type="xs:string" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="href" type="xs:string"/>
    <xs:attribute name="id" type="xs:long"/>
  </xs:complexType>

  <xs:complexType name="deviceList">
    <xs:sequence>
      <xs:element name="device-ref" type="deviceRef" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:attribute name="count" type="xs:int" use="required"/>
  </xs:complexType>

  <xs:complexType name="notification">
    <xs:sequence>
      <xs:element name="deviceToken" type="xs:base64Binary" minOccurs="0"/>
      <xs:element name="message" type="notificationContent" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="notificationContent">
    <xs:sequence>
      <xs:element name="alertText" type="xs:string" minOccurs="0"/>
      <xs:element name="alertDict" type="alertDictionary" minOccurs="0"/>
      <xs:element name="badge" type="xs:int" minOccurs="0"/>
      <xs:element name="sound" type="xs:string" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="alertDictionary">
    <xs:sequence>
      <xs:element name="actionLocKey" type="xs:string" minOccurs="0"/>
      <xs:element name="body" type="xs:string" minOccurs="0"/>
      <xs:element name="locArg" type="xs:string" nillable="true" minOccurs="0" maxOccurs="unbounded"/>
      <xs:element name="locKey" type="xs:string" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="notificationReport">
    <xs:sequence>
      <xs:element name="deviceCount" type="xs:long" minOccurs="0"/>
      <xs:element name="notificationReportId" type="xs:long" minOccurs="0"/>
      <xs:element name="notificationRequestId" type="xs:long" minOccurs="0"/>
      <xs:element name="sentOn" type="xs:dateTime" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="notificationRequest">
    <xs:sequence>
      <xs:element name="notificationRequestId" type="xs:long" minOccurs="0"/>
      <xs:element name="notificationContent" type="notificationContent" minOccurs="0"/>
      <xs:element name="applicationId" type="xs:long" minOccurs="0"/>
      <xs:element ref="scheduleItems"/>
      <xs:element ref="deviceTags"/>
      <xs:element name="useDev" type="xs:boolean" minOccurs="0"/>
      <xs:element name="isComplete" type="xs:boolean" minOccurs="0"/>
      <xs:element name="isActive" type="xs:boolean" minOccurs="0"/>
      <xs:element name="lastModifiedOn" type="xs:dateTime" minOccurs="0"/>
      <xs:element name="createdOn" type="xs:dateTime" minOccurs="0"/>
      <xs:element ref="devices"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="scheduleItemList">
    <xs:sequence>
      <xs:element name="scheduleItem" type="scheduleItem" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:attribute name="count" type="xs:int" use="required"/>
  </xs:complexType>

  <xs:complexType name="scheduleItem">
    <xs:sequence>
      <xs:element name="notificationTimeGMT" type="xs:string" minOccurs="0"/>
      <xs:element name="recurrenceDetail" type="xs:string" minOccurs="0"/>
      <xs:element name="recurrenceInterval" type="xs:int" minOccurs="0"/>
      <xs:element name="recurrenceType" type="recurrenceType" minOccurs="0"/>
      <xs:element name="recurrenceCount" type="xs:int" minOccurs="0"/>
      <xs:element name="startDate" type="xs:date" minOccurs="0"/>
      <xs:element name="endDate" type="xs:date" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="notificationRequestDeviceList">
    <xs:sequence>
      <xs:element name="device" type="notificationRequestDevice" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:attribute name="count" type="xs:int" use="required"/>
  </xs:complexType>

  <xs:complexType name="notificationRequestDevice">
    <xs:sequence/>
    <xs:attribute name="id" type="xs:long"/>
  </xs:complexType>

  <xs:complexType name="notificationRequestRef">
    <xs:sequence>
      <xs:element name="isActive" type="xs:boolean"/>
      <xs:element name="isComplete" type="xs:boolean"/>
      <xs:element name="content" type="notificationContent" minOccurs="0"/>
      <xs:element name="createdOn" type="xs:dateTime" minOccurs="0"/>
      <xs:element ref="deviceTags" minOccurs="0"/>
      <xs:element ref="devices" minOccurs="0"/>
      <xs:element name="lastModifiedOn" type="xs:dateTime" minOccurs="0"/>
      <xs:element name="nextLockedByHost" type="xs:string" minOccurs="0"/>
      <xs:element name="nextScheduledSend" type="xs:dateTime" minOccurs="0"/>
      <xs:element name="schedule" type="scheduleItemList" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="href" type="xs:string"/>
    <xs:attribute name="id" type="xs:long"/>
  </xs:complexType>

  <xs:complexType name="notificationRequestList">
    <xs:sequence>
      <xs:element name="notificationRequest-ref" type="notificationRequestRef" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:attribute name="count" type="xs:int" use="required"/>
    <xs:attribute name="pageCount" type="xs:int"/>
    <xs:attribute name="pageNumber" type="xs:int"/>
    <xs:attribute name="totalCount" type="xs:int"/>
  </xs:complexType>

  <xs:complexType name="user">
    <xs:sequence>
      <xs:element name="userName" type="xs:string" minOccurs="0"/>
      <xs:element name="accountId" type="xs:long" minOccurs="0"/>
      <xs:element name="applicationId" type="xs:long" minOccurs="0"/>
      <xs:element name="role" type="role" minOccurs="0"/>
      <xs:element name="password" type="xs:string" minOccurs="0"/>
      <xs:element name="firstName" type="xs:string" minOccurs="0"/>
      <xs:element name="middleName" type="xs:string" minOccurs="0"/>
      <xs:element name="lastName" type="xs:string" minOccurs="0"/>
      <xs:element name="title" type="xs:string" minOccurs="0"/>
      <xs:element name="address1" type="xs:string" minOccurs="0"/>
      <xs:element name="address2" type="xs:string" minOccurs="0"/>
      <xs:element name="city" type="xs:string" minOccurs="0"/>
      <xs:element name="state" type="xs:string" minOccurs="0"/>
      <xs:element name="postalCode" type="xs:string" minOccurs="0"/>
      <xs:element name="country" type="xs:string" minOccurs="0"/>
      <xs:element name="phone" type="xs:string" minOccurs="0"/>
      <xs:element name="fax" type="xs:string" minOccurs="0"/>
      <xs:element name="email" type="xs:string" minOccurs="0"/>
      <xs:element name="isActive" type="xs:boolean"/>
      <xs:element name="isVerified" type="xs:boolean"/>
      <xs:element name="userGuid" type="xs:string" minOccurs="0"/>
      <xs:element name="lastModifiedOn" type="xs:dateTime" minOccurs="0"/>
      <xs:element name="createdOn" type="xs:dateTime" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="userId" type="xs:long"/>
  </xs:complexType>

  <xs:complexType name="userRef">
    <xs:sequence>
      <xs:element name="accountId" type="xs:long" minOccurs="0"/>
      <xs:element name="active" type="xs:boolean"/>
      <xs:element name="createdOn" type="xs:dateTime" minOccurs="0"/>
      <xs:element name="firstName" type="xs:string" minOccurs="0"/>
      <xs:element name="lastModifiedOn" type="xs:dateTime" minOccurs="0"/>
      <xs:element name="lastName" type="xs:string" minOccurs="0"/>
      <xs:element name="middleName" type="xs:string" minOccurs="0"/>
      <xs:element name="role" type="xs:string" minOccurs="0"/>
      <xs:element name="userName" type="xs:string" minOccurs="0"/>
      <xs:element name="verified" type="xs:boolean"/>
    </xs:sequence>
    <xs:attribute name="href" type="xs:string"/>
    <xs:attribute name="userId" type="xs:long"/>
  </xs:complexType>

  <xs:complexType name="userList">
    <xs:sequence>
      <xs:element name="user-ref" type="userRef" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:attribute name="count" type="xs:int" use="required"/>
  </xs:complexType>

  <xs:simpleType name="certificateStatus">
    <xs:restriction base="xs:string">
      <xs:enumeration value="VERIFIED"/>
      <xs:enumeration value="UNVERIFIED"/>
      <xs:enumeration value="FAILED"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="recurrenceType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="NONE"/>
      <xs:enumeration value="DAILY"/>
      <xs:enumeration value="WEEKLY"/>
      <xs:enumeration value="MONTHLY"/>
      <xs:enumeration value="YEARLY"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="role">
    <xs:restriction base="xs:string">
      <xs:enumeration value="GLOBAL_ADMIN"/>
      <xs:enumeration value="ACCOUNT_ADMIN"/>
      <xs:enumeration value="ACCOUNT_USER"/>
      <xs:enumeration value="APP_USER"/>
    </xs:restriction>
  </xs:simpleType>
</xs:schema>

