// Modul


module DemoKunden.GO {

 // Schnittstelle
 export interface IKontakt {
  id: number;
  name: string;
  ort: string;
  plz: number;
  erfassungsdatum: any;
  getInfo(): string;
 }


 // #region Klasse
 /** Kontakt mit ID, Name, Ort, PLZ 
 * @autor Dr. Holger Schwichtenberg
 */
 export class Kontakt implements GO.IKontakt {
  public plz: number;

// ReSharper disable once InconsistentNaming
  private _erfassungsdatum: Date;

  get erfassungsdatum(): Date {
   return this._erfassungsdatum;
  }

  set erfassungsdatum(erfassungsdatum: Date) {
   this._erfassungsdatum = erfassungsdatum;
  }

  /**
  * @param id Kundenummer
  * @param name Kundenname
  * @param ort Kundenwohnort
  */
  constructor(
   /**
   Kundennummer
   */
   public id: number,
   /**
   Kundenname
   */
   public name: string,
   /**
   Kundenort
   */
   public ort: string = "unbekannt") {
   this.erfassungsdatum = new Date();
   this.id = id; // Diese Zeile ist ueberfluessig !!!

   if (Kunde.alleKontakte == null) Kunde.alleKontakte = new Array<Kunde>();
   Kunde.alleKontakte.push(this);
  }

  /**
  * @param mitOrt Soll der Ort mitgeliefert werden?
  * @param trenner Trennzeichen zwischen Name und Ort
  */
  public getGanzerName(mitOrt: boolean, trenner?: string) {
   if (!mitOrt) return this.name;
   return this.name + trenner + this.ort;
  }

  // Privates Instanzmitgled
  private getErfassungsdatum() {
   return this.erfassungsdatum;
  }

  // Oeffentliches Instanzmitgled
  getInfo() { return "Kontakt " + this.getBasisInfo(); }


  // Oeffentliches Instanzmitgled
  getBasisInfo() {
   return this.id + ": " + this.name + " in " + this.ort + " - erfasst am " + this.getErfassungsdatum();
  }

  // Statisches Mitglied
  static alleKontakte: Kontakt[];
 }
  // #endregion

 // #region Erbende Klasse
 export class Kunde extends Kontakt {

  public umsatz: number;

  //constructor()
  //{
  //    super(0, "");
  //}

  // Instanzmitgled
  getInfo() { return "Kunde " + super.getBasisInfo(); }

 }
 // #endregion

 function test() {

  //

  var meier = new GO.Kunde(1, "Meier", "Berlin");
  meier.getGanzerName(false);


 }

}


