// ----------------------------------------------
// Beispiel lit-x
// app.js
// ----------------------------------------------
// Verwendung von jquery, Single-Page / Ajax, Event-Service
// REST-Interface
// ----------------------------------------------

'use strict'

// ----------------------------------------------
// Namensraum einrichten
// ----------------------------------------------

let APP = {};

// ----------------------------------------------
APP.Application_cl = class {
// ----------------------------------------------
   constructor () {
      this.content_o         = null; // das jeweils aktuelle Objekt im Contentbereich
      this.nav_o             = new APP.Nav_cl();

      this.listProjekt_o     = new APP.ListView_cl('projekt', '/projekt/', 'projektlist.tpl');
      this.detailProjekt_o   = new APP.DetailView_cl('projekt', '/projekt/', 'projektdetail.tpl');

      this.listKomponente_o     = new APP.ListView_cl('komponente', '/komponente/', 'komponentelist.tpl');
      this.detailKomponente_o   = new APP.DetailView_cl('komponente', '/komponente/', 'komponentedetail.tpl');

      this.listQsMitarbeiter_o     = new APP.ListView_cl('qsmitarbeiter', '/qsmitarbeiter/', 'qsmitarbeiterlist.tpl');
      this.detailQsMitarbeiter_o   = new APP.DetailView_cl('qsmitarbeiter', '/qsmitarbeiter/', 'qsmitarbeiterdetail.tpl');

      this.listSwEntwickler_o     = new APP.ListView_cl('swentwickler', '/swentwickler/', 'swentwicklerlist.tpl');
      this.detailSwEntwickler_o   = new APP.DetailView_cl('swentwickler', '/swentwickler/', 'swentwicklerdetail.tpl');

      // this.listSources_o     = new APP.ListView_cl('source', '/source/', 'sourceslist.tpl');
      // this.detailSources_o   = new APP.SourceDetailView_cl('source', '/source/', 'sourcedetail.tpl');
      // this.listEvaluated_o   = new APP.ListView_cl('evaluated', '/evaluated/', 'evaluatedlist.tpl');
      // this.detailEvaluated_o = new APP.DetailView_cl('evaluated', '/evaluated/', 'evaluateddetail.tpl');

      // Registrierungen
      APP.es_o.subscribe_px(this, 'app');
   }
   notify_px (self_opl, message_spl, data_apl) {
      switch (message_spl) {
      case 'app':
         switch (data_apl[0]) {
         case 'init':
            APP.tm_o = new TemplateManager_cl();
            break;
         case 'templates.loaded':
            self_opl.nav_o.render_px();
            // Liste Quellen im Content-Bereich anzeigen
            // self_opl.setContent_p(self_opl.listSources_o, data_apl[1]);
            break;
         case 'projekt':
            self_opl.setContent_p(self_opl.listProjekt_o, data_apl[1]);
            break;
         case 'projekt.add':
            // (leeres) Detailformular im Content-Bereich anzeigen
            self_opl.setContent_p(self_opl.detailProjekt_o, data_apl[1]);
            break;
         case 'projekt.edit':
            // Detailformular im Content-Bereich anzeigen
            self_opl.setContent_p(self_opl.detailProjekt_o, data_apl[1]);
            break;
         case 'komponente':
            self_opl.setContent_p(self_opl.listKomponente_o, data_apl[1]);
            break;
         case 'komponente.add':
            // (leeres) Detailformular im Content-Bereich anzeigen
            self_opl.setContent_p(self_opl.detailKomponente_o, data_apl[1]);
            break;
         case 'komponente.edit':
            // Detailformular im Content-Bereich anzeigen
            self_opl.setContent_p(self_opl.detailKomponente_o, data_apl[1]);
            break;
         case 'qsmitarbeiter':
            self_opl.setContent_p(self_opl.listQsMitarbeiter_o, data_apl[1]);
            break;
         case 'qsmitarbeiter.add':
            // (leeres) Detailformular im Content-Bereich anzeigen
            self_opl.setContent_p(self_opl.detailQsMitarbeiter_o, data_apl[1]);
            break;
         case 'qsmitarbeiter.edit':
            // Detailformular im Content-Bereich anzeigen
            self_opl.setContent_p(self_opl.detailQsMitarbeiter_o, data_apl[1]);
            break;
         case 'swentwickler':
            self_opl.setContent_p(self_opl.listSwEntwickler_o, data_apl[1]);
            break;
         case 'swentwickler.add':
            // (leeres) Detailformular im Content-Bereich anzeigen
            self_opl.setContent_p(self_opl.detailSwEntwickler_o, data_apl[1]);
            break;
         case 'swentwickler.edit':
            // Detailformular im Content-Bereich anzeigen
            self_opl.setContent_p(self_opl.detailSwEntwickler_o, data_apl[1]);
            break;
         default:
            console.warn('[Application_cl] unbekannte app-Notification: '+data_apl[0]);
            break;
         }
         break;
      default:
         console.warn('[Application_cl] unbekannte Notification: '+message_spl);
         break;
      }
   }
   setContent_p (newContent_opl, data_opl) {
      if (this.content_o != null) {
         if (this.content_o === newContent_opl) { // Achtung: Vergleich auf Identität (===) und nicht nur auf Gleichheit (==)
            // wird bereits angezeigt, keine Änderung
         } else {
            if (this.content_o.canClose_px()) {
               this.content_o.close_px();
               this.content_o = newContent_opl;
               this.content_o.render_px(data_opl);
            }
         }
      } else {
         this.content_o = newContent_opl;
         this.content_o.render_px(data_opl);
      }
   }
}

// ----------------------------------------------
$(document).ready(function(){
// ----------------------------------------------
   // wird ausgeführt, wenn das Dokument vollständig geladen wurde
   APP.es_o  = new EventService_cl();
   APP.app_o = new APP.Application_cl();

   APP.es_o.publish_px('app', ['init', null]);

});
// EOF