using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;

namespace dotnetconsulting.WcfSample
{
    // HINWEIS: Mit dem Befehl "Umbenennen" im Menü "Umgestalten" können Sie den Klassennamen "Service1" sowohl im Code als auch in der Konfigurationsdatei ändern.
    public partial class BankService : IBankService
    {
        public decimal GetBalance(string AccountNr)
        {
            // ...
            return 0m;
        }

        public void DepositAmount(string AccountNr, decimal Amount)
        {
            // ...
        }

        public void WithdrawAmount(string AccountNr, decimal Amount)
        {
            // Prüfen, ob der Betrag gültig ist
            if (Amount <= 0)
            {
                // FaultException auslösen
                WithdrawException we = new WithdrawException()
                {
                    TechnicalReason = "Betrag zu klein",
                    ReasonCode = 1,
                    Description = "Betrag kleiner gleich 0"
                };
                throw new FaultException<WithdrawException>(we);
            }

            // Hat das Konto genügend Deckung?
            if (!SufficientCover())
            {
                // FaultException auslösen
                WithdrawException we = new WithdrawException()
                {
                    TechnicalReason = "Ungenügende Deckung",
                    ReasonCode = 2,
                    Description = "Auf dem Konto ist nicht genug Guthaben"
                };
                throw new FaultException<WithdrawException>(we);
            }

            // Abbuchung durchführen
            // ...
        }

        private bool SufficientCover()
        {
            return false;
        }
    }



    partial class BankService
    {
        public AccountStatus GetStatus(string AccountNr)
        {
            // ...
            return AccountStatus.Open;
        }

        public void SetStatus(string AccountNr)
        {
            // ...
        }
    }
}
