<?xml version="1.0" encoding="utf-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            targetNamespace="http://plapi.enhance.com/service/account"
            xmlns="http://plapi.enhance.com/service/account"
            xmlns:tns="http://plapi.enhance.com/service/account">
    <xsd:annotation>
        <xsd:documentation xml:lang="en">
         Account schema for PLM-J
         &#169; 2006 Marchex, INC
        </xsd:documentation>
    </xsd:annotation>
<!--
    <xsd:simpleType name="email">
        <xsd:restriction base="xsd:string">
            <xsd:pattern value="[A-Za-z._-]+@[A-Za-z._-]+\.[a-zA-Z]+"/>
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name="country-type">
        <xsd:restriction base="xsd:string">
            <xsd:minLength value="2"/>
            <xsd:maxLength value="2"/>
        </xsd:restriction>
    </xsd:simpleType>


    <xsd:simpleType name="card-type">
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="A"/>
            <xsd:enumeration value="V"/>
            <xsd:enumeration value="M"/>
            <xsd:enumeration value="D"/>
        </xsd:restriction>
    </xsd:simpleType>
    -->
    <xsd:element name="accounts">
      <xsd:complexType>
        <xsd:sequence>
          <xsd:element name="account" type="tns:account" maxOccurs="unbounded"/>
        </xsd:sequence>
      </xsd:complexType>
    </xsd:element>

    <xsd:element name="account" type="tns:account"/>

    <xsd:complexType name="account">
      <xsd:attribute name="id" use="optional" type="xsd:int"/>
      <!-- 1140220204: this is a soft requirement for some actions, actions
      that require it will throw faults upon it's absence -->
      <xsd:attribute name="name" use="optional" type="xsd:string"/>
      <xsd:attribute name="auto-renew" use="optional" type="xsd:decimal"/>
      <xsd:attribute name="daily-cap" use="optional" type="xsd:decimal"/>
      <xsd:attribute name="card-id" use="optional" type="xsd:int"/>
    </xsd:complexType>

    <xsd:element name="deposit">
      <xsd:complexType>
        <xsd:attribute name="account-id" use="required" type="xsd:int"/>
        <xsd:attribute name="card-id" use="required" type="xsd:int"/>
        <xsd:attribute name="amount" use="required" type="xsd:decimal"/>
      </xsd:complexType>
    </xsd:element>

    <xsd:element name="receipt">
      <xsd:complexType>
        <xsd:attribute name="account-id" use="required" type="xsd:int"/>
        <xsd:attribute name="card" use="required" type="xsd:string"/>
        <xsd:attribute name="transaction-id" use="required" type="xsd:int"/>
        <xsd:attribute name="balance" use="required" type="xsd:decimal"/>
      </xsd:complexType>
    </xsd:element>

    <xsd:complexType name="street">
      <xsd:attribute name="number" use="required" type="xsd:string"/>
      <xsd:attribute name="unit" use="optional" type="xsd:string"/>
      <xsd:attribute name="postal-code" use="optional" type="xsd:string"/>
    </xsd:complexType>

    <xsd:complexType name="region">
      <xsd:attribute name="city" use="required" type="xsd:string"/>
      <xsd:attribute name="state" use="optional" type="xsd:string"/>
      <xsd:attribute name="province" use="optional" type="xsd:string"/>
      <xsd:attribute name="country" use="required" type="xsd:string"/>
    </xsd:complexType>

    <xsd:complexType name="address">
      <xsd:sequence>
        <xsd:element name="street" type="tns:street"/>
        <xsd:element name="region" type="tns:region"/>
      </xsd:sequence>
    </xsd:complexType>

    <xsd:element name="card">
      <xsd:complexType>
        <xsd:attribute name="id" use="required" type="xsd:int"/>
        <xsd:attribute name="account-id" use="required" type="xsd:int"/>
        <xsd:attribute name="type" use="required" type="xsd:byte"/>
        <xsd:attribute name="cvv" use="required" type="xsd:int"/>
        <xsd:attribute name="number" use="required" type="xsd:string"/>
        <xsd:attribute name="name" use="required" type="xsd:string"/>
        <xsd:attribute name="expiration" use="optional" type="xsd:string"/>

        <xsd:sequence>
          <xsd:element name="address" minOccurs="1" maxOccurs="1" type="tns:address"/>
        </xsd:sequence>
      </xsd:complexType>
    </xsd:element>

    <xsd:element name="user">
      <xsd:complexType>
        <xsd:attribute name="id" use="optional" type="xsd:int"/>
        <xsd:attribute name="email" use="optional" type="xsd:string"/>
        <xsd:attribute name="password" use="optional" type="xsd:string"/>
        <xsd:attribute name="name" use="optional" type="xsd:string"/>
        <xsd:sequence>
          <!-- 1140220204: This is the reason, our specification demands we
          accept nothing more than a list of ids when a user is created.
          Otherwise, we may likely return a list of accounts.  But we actually
          never return a user. -->
          <xsd:element name="account" type="tns:account" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
      </xsd:complexType>
    </xsd:element>

        <xsd:element name="createAccount">
            <xsd:complexType>
                <xsd:sequence>
                    <xsd:element name="account" type="tns:account"/>
                </xsd:sequence>
            </xsd:complexType>
        </xsd:element>
</xsd:schema>
