/// <reference path="../lib/typings/angular/angular.d.ts" />
/// <reference path="../lib/typings/jquery/jquery.d.ts" />

console.log("Lade Modul...");
/// // Angular-App
// abhängig von Modul angularMoment
var app = angular.module("WWWings", ['angularMoment']); // []

// Anlegen des Controllers
// DI:
// $scope für Datenbindungen
// $http für Ajax-Rückrufe
// $location für clientseitige Navigation
app.controller("WWWingsController", ["$scope", "$http", init]);
//app.run(function (amMoment) {
// amMoment.changeLocale('de');
//});

// Hilfsfunktion zum Zahlenformatieren 12 -> 0012
function numberFixedLen(n, len) {
 var num: any = parseInt(n, 10);
 len = parseInt(len, 10);
 if (isNaN(num) || isNaN(len)) {
  return n;
 }
 num = '' + num;
 while (num.length < len) {
  num = '0' + num;
 }
 return num;
}

// AngularFilter definieren für numberFixedLen
app.filter('numberFixedLen', function () {
 return numberFixedLen;
});


function init($scope, $http) {
 console.debug("NG Controller Init");
 // ViewModel für rein.clientseitige Lösung anlegen

  $scope.vm1 = new VM1($scope, $http);;
  $scope.vm1.GetFluege();
  // ViewModel für hybride Lösung anlegen
  $scope.vm2 = new VM2($scope, $http);;
};

// GO-Klasse auf dem Client
class Flug {
 public flugNr: number;
 public abflugort: string;
 public zielort: string;
 public datum: Date;
 public freiePlaetze:number;
}

// VM für rein clientseitige Lösung mit AngularJS
class VM1 {

 constructor(public scope: any, public http: ng.IHttpService) { }

 // Clientseitige Repräsentation von List<Flug>
 public Fluege: Array<Flug>;
 // Für Ausgabe
 public LetzteAenderung: string;

  // Proxy für /Flug/GetFluegeAPI
 public GetFluege()  {

  console.debug("GetFluege");

  var params = null; //{ flugNummer: this.eingabe };

  this.http.get(`/wwwings/GetFluegeAPI`, { params: params }).then((result) => {
   this.Fluege = result.data;
   this.LetzteAenderung = `Geladene Flüge ${this.Fluege.length}`;
   console.log(this.LetzteAenderung);


   for (var i = 0; i <= this.Fluege.length; i++) {
    console.log(this.Fluege[i].flugNr);
   }


  }).catch((reason) => {
   this.LetzteAenderung = "Fehler: " + JSON.stringify(reason);
  });

 }



  // Proxy für /Flug/PlaetzeAendernAPI
 public PlaetzeAendern(flugNummer: number, anzahl: number) {

  console.debug("PlaetzeAendern");

  var params = null; //{ flugNummer: this.eingabe };

  this.http.get(`/wwwings/PlaetzeAendernAPI/${flugNummer}/${anzahl}`, { params: params }).then((result) => {
   this.LetzteAenderung = `Letzte Änderung: Flug ${flugNummer}: ${JSON.stringify(result.data)} freie Plätze`;
   console.log(this.LetzteAenderung);

   if (this.Fluege != null) {
    var flug = this.Fluege.filter(person => person.flugNr === flugNummer);
    flug[0].freiePlaetze = result.data;
   }

  }).catch((reason) => {
   this.LetzteAenderung = "Fehler: " + JSON.stringify(reason);
  });

 }
}

// VM für hybride Lösung mit jQuery
class VM2 {

 constructor(public scope: any, public http: ng.IHttpService) { }

 public LetzteAenderung: string;

  // Proxy für /Flug/PlaetzeAendernAPI
 public PlaetzeAendern(flugNummer: number, anzahl: number) {

  console.debug("PlaetzeAendern");

  var params = null; //{ flugNummer: this.eingabe };

  this.http.get(`/wwwings/PlaetzeAendernAPI/${flugNummer}/${anzahl}`, { params: params }).then((result) => {
   this.LetzteAenderung = `Letzte Änderung: Flug ${flugNummer}: ${JSON.stringify(result.data)} freie Plätze`;
   console.log(this.LetzteAenderung);
   $("#FP_" + flugNummer).text(numberFixedLen(result.data,3));
  }).catch((reason) => {
   this.LetzteAenderung = "Fehler: " + JSON.stringify(reason);
  });

 }
}