// ----------------------------------------------
// Beispiel lit-x
// detail.js
// ----------------------------------------------

// ----------------------------------------------
APP.DetailView_cl = class {
// ----------------------------------------------
   constructor (name_spl, path_spl, template_spl) {
      this.name_s = name_spl;
      this.path_s = path_spl;
      this.template_s = template_spl;
   }
   canClose_px () {
      // Prüfen, ob Formularinhalt verändert wurde
      let mod_b = this.isModified_p();
      if (mod_b) {
         if (confirm("Es gibt nicht gespeicherte Änderungen - verwerfen?")) {
            mod_b = false;
         }
      }
      return !mod_b;
   }
   close_px () {
      this.exitHandler_p();
   }
   render_px (data_opl) {
      let path_s;
      if (data_opl != null) {
         path_s = this.path_s + data_opl;
      } else {
         path_s = this.path_s + '0';
      }
      $.ajax({
         dataType: "json",
         url: path_s,
         type: 'GET',
         context: this
      })
      .done(function (data_opl) {
         console.log(data_opl);
         this.doRender_p(data_opl);
         this.initHandler_p();
      })
      .fail(function(jqXHR_opl, textStatus_spl) {
         alert( "[Detail] Fehler bei Anforderung: " + textStatus_spl );
      });
   }
   doRender_p (data_opl) {
      var markup_s = APP.tm_o.execute_px(this.template_s, data_opl);
      $("#idContentOuter").html(markup_s);
      this.storeFormContent_p();
   }
   initHandler_p () {
      // Ereignisverarbeitung für das Formular einrichten
      $("#idForm").on("click", "button", $.proxy(this.onClickButtons_p, this));
   }
   exitHandler_p () {
      // Ereignisverarbeitung für das Formular aufheben
      $("#idForm").off("click", "button", $.proxy(this.onClickButtons_p, this));
   }
   onClickButtons_p (event_opl) {
      var do_b = false;
      var path_s;
      var action_s = $(event_opl.target).attr("data-action");
      switch (action_s) {
      case "back":
         // Weiterleiten: Liste anfordern
         APP.es_o.publish_px('app', [this.name_s, null]);
         break;
      case "save":
         // Formularinhalt prüfen
         if (this.isModified_p()) {
            if (this.checkContent_p()) {
               // kein klassisches submit, es wird auch keine neue Anzeige vorgenommen
               var path_s = this.path_s;
               var data_s = $("#idForm").serialize();
               var type_s = 'PUT';
               var id_s = $('#id_s').val();
               if (id_s == '') {
                  type_s = 'POST';
               }
               $.ajax({
                  context: this,
                  dataType: "json",
                  data: data_s, 
                  url: path_s,
                  type: type_s
               })
               .done(function (data_opl) {
                  // Umwandlung der JSON-Daten vom Server bereits erfolgt
                  $('#id_s').val(data_opl['id']);
                  // aktuellen Formularinhalt speichern
                  // (das Formular wird ja nicht mehr neu geladen!)
                  this.storeFormContent_p();
                  alert("Speichern ausgeführt!");
               })
               .fail(function(jqXHR_opl, textStatus_spl) {
                  alert( "Fehler bei Anforderung: " + textStatus_spl );
               });

            } else {
               alert("Bitte prüfen Sie die Eingaben in den Formularfeldern!")
            }
         }
         break;
      }
      // Weiterleitung und Standardbearbeitung unterbinden
      event_opl.stopPropagation();
      event_opl.preventDefault();
   }
   isModified_p () {
      // Prüfen, ob Formularinhalt verändert wurde
      var mod_b = this.FormContentOrg_s != $("#idForm").serialize();
      return mod_b;
   }
   checkContent_p () {
      return true;
   }
   storeFormContent_p () {
      this.FormContentOrg_s = $("#idForm").serialize();
   }
}

// ----------------------------------------------
APP.SourceDetailView_cl = class extends APP.DetailView_cl {
// ----------------------------------------------
   //constructor (name_spl, path_spl, template_spl) {
   //   super.constructor(name_spl, path_spl, template_spl)
   //}
   checkContent_p () {
      // hier nur zur Demonstration Prüfung des Typs gegen eine Werteliste
      // (das realisiert man besser mit einer Liste)
      var status_b = true;
      var typ_s = $("#typ_s").val();
      if ((typ_s != "Typ1") && (typ_s != "Typ2")) {
         status_b = false;
      }
      return status_b;
   }
}

// EOF