// Modul
module DemoFlug.GO {


 // #region "Schnittstelle#"
 /**
 * Schnittstelle für Flug-Objekte
 */
 export interface IFlug {
  id: number;
  abflugort: string;
  zielort: string;
  freiePlaetze: number;
  datum: any;
  getInfo(): string;
 }
  // #endregion "Schnittstelle#"

 /**
 * Klasse für einen Flug, verwendet IFlug
 */
 export class Flug implements GO.IFlug {

  /**
  * @param id Flugnummer
  * @param abflugort Abflughafen
  * @param zielort Zielflughafen
  * @param freiePlaetze Anzahl der freien Plaetze
  * @param datum Flugdatum
  */
  constructor(public id: number, public abflugort: string, public zielort: string, public freiePlaetze: number = 0, public datum?: Date) {
   if (Flug.alleFluege == null) Flug.alleFluege = new Array<Flug>();
   Flug.alleFluege.push(this)
  }

    /**
  *  Privates Instanzmitgled
  */
  private getDatum() {
   return this.datum;
  }

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


  /**
  *  Oeffentliches Instanzmitgled
  */
  getBasisInfo() {
   return this.id + ": von " + this.abflugort + " nach " + this.zielort + " - am " + this.getDatum();
  }

  /**
  *  Statisches Mitglied, das alle Instanzen liefert
  */
  static alleFluege: Flug[]; // Alternativ: Array<Flug>
 }

 /**
 *  Spezialisierung von Flug
 */
 export class FlugMitPilot extends Flug {

  /**
  *  Pilotenname
  */
  public Pilot: string;

  //constructor()
  //{
  //    super();
  //}

  /**
  *  Oeffentliches Instanzmitgled
  */
  getPilotInfo() { return "Flug " + super.getBasisInfo() + " Pilot: " + this.Pilot

  {

  }
  }



 }


 //function test() {

 //    var k = new DemoKunden.GO.Kunde(1,"test","Köln");
 //    k.umsatz = 10000;

 //}
}