<?xml version="1.0" encoding="UTF-8"?>
<definitions name="BankingWS"
  targetNamespace="http://bankingws.security-lab.cloud/wsdl"
  xmlns="http://schemas.xmlsoap.org/wsdl/"
  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
  xmlns:tns="http://bankingws.security-lab.cloud/wsdl"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema">

  <types>
    <xsd:schema targetNamespace="http://bankingws.security-lab.cloud/wsdl">

      <xsd:element name="LoginRequest">
        <xsd:complexType><xsd:sequence>
          <xsd:element name="username" type="xsd:string"/>
          <xsd:element name="password" type="xsd:string"/>
        </xsd:sequence></xsd:complexType>
      </xsd:element>
      <xsd:element name="LoginResponse">
        <xsd:complexType><xsd:sequence>
          <xsd:element name="token" type="xsd:string"/>
          <xsd:element name="role"  type="xsd:string"/>
        </xsd:sequence></xsd:complexType>
      </xsd:element>

      <xsd:element name="GetAccountRequest">
        <xsd:complexType><xsd:sequence>
          <xsd:element name="accountId" type="xsd:integer"/>
        </xsd:sequence></xsd:complexType>
      </xsd:element>
      <xsd:element name="GetAccountResponse">
        <xsd:complexType><xsd:sequence>
          <xsd:element name="accountId"   type="xsd:integer"/>
          <xsd:element name="owner"       type="xsd:string"/>
          <xsd:element name="balance"     type="xsd:decimal"/>
          <xsd:element name="accountType" type="xsd:string"/>
          <xsd:element name="iban"        type="xsd:string"/>
          <xsd:element name="pin"         type="xsd:string"/>
        </xsd:sequence></xsd:complexType>
      </xsd:element>

      <xsd:element name="TransferRequest">
        <xsd:complexType><xsd:sequence>
          <xsd:element name="token"       type="xsd:string"/>
          <xsd:element name="fromAccount" type="xsd:integer"/>
          <xsd:element name="toAccount"   type="xsd:integer"/>
          <xsd:element name="amount"      type="xsd:decimal"/>
          <xsd:element name="currency"    type="xsd:string"/>
          <xsd:element name="role"        type="xsd:string"/>
        </xsd:sequence></xsd:complexType>
      </xsd:element>
      <xsd:element name="TransferResponse">
        <xsd:complexType><xsd:sequence>
          <xsd:element name="transactionId" type="xsd:string"/>
          <xsd:element name="status"        type="xsd:string"/>
          <xsd:element name="newBalance"    type="xsd:decimal"/>
        </xsd:sequence></xsd:complexType>
      </xsd:element>

      <xsd:element name="GetAllAccountsRequest">
        <xsd:complexType><xsd:sequence>
          <xsd:element name="token" type="xsd:string"/>
        </xsd:sequence></xsd:complexType>
      </xsd:element>
      <xsd:element name="GetAllAccountsResponse">
        <xsd:complexType><xsd:sequence>
          <xsd:element name="accounts" type="xsd:string"/>
          <xsd:element name="count"    type="xsd:integer"/>
        </xsd:sequence></xsd:complexType>
      </xsd:element>

      <xsd:element name="GetStatementRequest">
        <xsd:complexType><xsd:sequence>
          <xsd:element name="accountId" type="xsd:integer"/>
          <xsd:element name="fromDate"  type="xsd:string"/>
          <xsd:element name="toDate"    type="xsd:string"/>
          <xsd:element name="format"    type="xsd:string"/>
        </xsd:sequence></xsd:complexType>
      </xsd:element>
      <xsd:element name="GetStatementResponse">
        <xsd:complexType><xsd:sequence>
          <xsd:element name="statement"      type="xsd:string"/>
          <xsd:element name="totalDebits"    type="xsd:decimal"/>
          <xsd:element name="totalCredits"   type="xsd:decimal"/>
        </xsd:sequence></xsd:complexType>
      </xsd:element>

    </xsd:schema>
  </types>

  <message name="LoginIn">   <part name="parameters" element="tns:LoginRequest"/></message>
  <message name="LoginOut">  <part name="parameters" element="tns:LoginResponse"/></message>
  <message name="GetAccountIn">  <part name="parameters" element="tns:GetAccountRequest"/></message>
  <message name="GetAccountOut"> <part name="parameters" element="tns:GetAccountResponse"/></message>
  <message name="TransferIn">    <part name="parameters" element="tns:TransferRequest"/></message>
  <message name="TransferOut">   <part name="parameters" element="tns:TransferResponse"/></message>
  <message name="GetAllAccountsIn">  <part name="parameters" element="tns:GetAllAccountsRequest"/></message>
  <message name="GetAllAccountsOut"> <part name="parameters" element="tns:GetAllAccountsResponse"/></message>
  <message name="GetStatementIn">  <part name="parameters" element="tns:GetStatementRequest"/></message>
  <message name="GetStatementOut"> <part name="parameters" element="tns:GetStatementResponse"/></message>

  <portType name="BankingPortType">
    <operation name="Login">
      <input message="tns:LoginIn"/><output message="tns:LoginOut"/>
    </operation>
    <operation name="GetAccount">
      <input message="tns:GetAccountIn"/><output message="tns:GetAccountOut"/>
    </operation>
    <operation name="TransferFunds">
      <input message="tns:TransferIn"/><output message="tns:TransferOut"/>
    </operation>
    <operation name="GetAllAccounts">
      <input message="tns:GetAllAccountsIn"/><output message="tns:GetAllAccountsOut"/>
    </operation>
    <operation name="GetStatement">
      <input message="tns:GetStatementIn"/><output message="tns:GetStatementOut"/>
    </operation>
  </portType>

  <binding name="BankingBinding" type="tns:BankingPortType">
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
    <operation name="Login">
      <soap:operation soapAction="Login"/>
      <input><soap:body use="literal"/></input>
      <output><soap:body use="literal"/></output>
    </operation>
    <operation name="GetAccount">
      <soap:operation soapAction="GetAccount"/>
      <input><soap:body use="literal"/></input>
      <output><soap:body use="literal"/></output>
    </operation>
    <operation name="TransferFunds">
      <soap:operation soapAction="TransferFunds"/>
      <input><soap:body use="literal"/></input>
      <output><soap:body use="literal"/></output>
    </operation>
    <operation name="GetAllAccounts">
      <soap:operation soapAction="GetAllAccounts"/>
      <input><soap:body use="literal"/></input>
      <output><soap:body use="literal"/></output>
    </operation>
    <operation name="GetStatement">
      <soap:operation soapAction="GetStatement"/>
      <input><soap:body use="literal"/></input>
      <output><soap:body use="literal"/></output>
    </operation>
  </binding>

  <service name="BankingWS">
    <port name="BankingPort" binding="tns:BankingBinding">
      <soap:address location="https://soap.security-lab.cloud/ws"/>
    </port>
  </service>
</definitions>