var $$ = Dom7;

var actionOpzioni;

var app = new Framework7({
  root: '#app',
  name: 'Aesse srl',
  theme: 'auto',

  // App root data
  data: function () {
    return {
      url: "http://192.168.24.44/stampa-etichette-backend/",
      urlConsultaMacchinario: "http://192.168.24.44/consultazione-macchinario/Consultazione_report_macchinario",

      lista_matricole: [],
      lista_stampanti: [],
      lista_caratteristiche05: [],
      datiForm: '',
    };
  },

  // App routes
  routes: routes,

  // Eventi
  on: {
    init: async function () {
      await gestisciAvvioApp(this);
    }
  },

});

async function gestisciAvvioApp(app) {
  IP = app.data.url;
  creaActionOpzioni(app);

  Utility.caricaAutocomplete(app, 'articolo_etichetta', 'ARCDA', 'ARDES', 'ws/get_articoli');

  // Inizializzo gli array in app
  await caricaArrayStampanti(app);
  await caricaArrayCaratteristiche05(app);

}


async function caricaArrayStampanti(app) {
  return new Promise(resolve => {

    let url = IP + WS_STAMPANTI.GET_STAMPANTI;
    app.request.promise.post(url, {}).then(function (res) {

      let stampanti = JSON.parse(res.data);

      // Salvo in una variabile di app la lista delle stampanti
      app.data.lista_stampanti = stampanti;
      resolve(true);
    }).catch(function (errore) {
      app.preloader.hide();
      Utility.alertAttenzione(errore);
      resolve(false);
    });
  });
}

async function caricaArrayCaratteristiche05(app) {
  return new Promise(resolve => {
      let url = IP + WS_ARTICOLI.GET_CAR05;
      app.request.promise.post(url, {}).then(function (res) {

        let car05 = JSON.parse(res.data);

        // Salvo in una variabile di app la lista delle caratteristiche 05
        app.data.lista_caratteristiche05 = car05;
        // Disegno gli elementi sfruttando gli array che ho appena popolato
        disegnaPulsantiCaratteristiche05(app);

      }).catch(function (errore) {
        app.preloader.hide();
        Utility.alertAttenzione(errore);
        resolve(false);
      });
      
    resolve(true);
  });
}

async function creaActionOpzioni(app) {

  var textBtn1 = await translateText('lbl43');
  var textBtn2 = await translateText('lbl58');
  var textBtn3 = await translateText('lbl59');
  var textBtn4 = await translateText('lbl60');



  actionOpzioni = app.actions.create({
    buttons: [
      {
        text: textBtn1,
        onClick: function (actions, e) {
          app.view.main.router.navigate('/gestioneStampanti/')
        }
      },
      // {
      //   text: textBtn2,
      //   onClick: function (actions, e) {
      //     recupera_ip_locale();
      //   }
      // },
      {
        text: textBtn3,
        onClick: function (actions, e) {
          window.open(app.data.urlConsultaMacchinario);
        }
      },
      {
        text: textBtn4,
        bold: true,
        onClick: async function (actions, e) {
          var msg = await translateText('lbl32');
          app.dialog.confirm(msg, '<i class="icon f7-icons" style="color:orange;">question_diamond_fill</i>', function () {
            var urlWs = app.data.url + "ws/spegnimento/";
            inviaDatiWs({}, urlWs, back);
          });
        }
      }
    ]
  });

}

$$('.ac-1').on('click', () => {
  actionOpzioni.open();
});

//#region Inizializzazione Calendari
app.calendar.create({
  inputEl: '#data_revisione_input',
});
app.calendar.create({
  inputEl: '#data_scadenza_revisione_input',
});
app.calendar.create({
  inputEl: '#data_scadenza_collaudo_input',
});

app.calendar.create({
  inputEl: '#data_revisione_libera_input',
});
app.calendar.create({
  inputEl: '#data_scadenza_revisione_libera_input',
});
app.calendar.create({
  inputEl: '#data_scadenza_collaudo_libera_input',
});
app.calendar.create({
  inputEl: '#data_collaudo_libera_input',
});
//#endregion 

$$(document).on('page:init', '.page[data-name="nuova_matricola"]', function (e, page) {

  loadTranslationsAndApply();

  var datiForm = app.form.convertToData('#cerca_matricola');

  app.form.fillFromData('#inserisci_matricola', datiForm);
  Utility.caricaAutocomplete(app, 'fornitore_etichetta_da_inserire', 'COCONT', 'CORAGS', 'ws/get_fornitori');
  Utility.caricaAutocomplete(app, 'articolo_etichetta_da_inserire', 'ARCDA', 'ARDES', 'ws/get_articoli');
});

/** Pulsante CERCA nella schermata principale della PWA, per la stampa dei QRCODE */
$$(document).on('click', '#btn_cerca_matricola', async function () {
  if ($$('#articolo_etichetta').val() !== '' && $$('#matricola_etichetta').val() !== '') {
    var articolo = $$('#articolo_etichetta').val();
    // recupero i dati dell'articolo
    let url = IP + WS_ARTICOLI.GET_ARTICOLO;
    app.request.post(url,
      { 'codArticolo': articolo }
      , async function (res) {
        let articoloObj = JSON.parse(res);
        if (articoloObj == undefined || articoloObj === null || articoloObj.length == 0) {
          var textAlert = await translateText('lbl73');
          Utility.alertAttenzione(textAlert);

        } else {

          app.preloader.show();
          var urlWs = app.data.url + "ws/get_n_matricole/";

          var idForm = "cerca_matricola";
          var datiForm = app.form.convertToData('#' + idForm);

          inviaDatiWs(datiForm, urlWs, gestioneMatricole);
        }
      }, function (errore) {
        app.preloader.hide();
        Utility.alertAttenzione(errore);
      });
  } else {
    var textAlert = await translateText('lbl53');
    Utility.alertAttenzione(textAlert);
  }
});

$$(document).on('click', '#btn_inserisci_matricola', async function () {
  var urlWs = app.data.url + "ws/inserisci_matricola/";
  var idForm = "inserisci_matricola";
  var datiForm = app.form.convertToData('#' + idForm);

  if (datiForm.anno !== "") {

    if (datiForm.fornitore !== "") {

      if (datiForm.articolo !== "") {

        inviaDatiWs(datiForm, urlWs, back);
        // recupero i dati dell'articolo
        let url = IP + WS_ARTICOLI.GET_ARTICOLO;
        app.request.post(url,
          { 'codArticolo': datiForm.articolo }
          , function (res) {
            let articolo = JSON.parse(res);

            var datiForm2 = {
              'anno': datiForm.anno,
              'matricola': datiForm.matricola,
              'fornitore': datiForm.fornitore,
              'articolo': datiForm.articolo,
              'data_collaudo': datiForm.anno,
              'descr_articolo': articolo[0].ARDES
            };
            app.data.datiForm = datiForm2;

            compilaPopupQRCode();

          }, function (errore) {
            app.preloader.hide();
            Utility.alertAttenzione(errore);
          });

      } else {
        var textAlert = await translateText('lbl54');
        Utility.alertAttenzione(textAlert);
      }
    } else {
      var textAlert = await translateText('lbl55');
      Utility.alertAttenzione(textAlert);
    }
  } else {
    var textAlert = await translateText('lbl56');
    Utility.alertAttenzione(textAlert);
  }
});

$$(document).on('click', '.stampa_etichetta_qrcode', function () {

  var ip_stampante = $$(this).attr("ipStampante");
  var porta_stampante = $$(this).attr("portaStampante");
  var modello_stampante = $$(this).attr("modelloStampante");

  // Creo il json con i dati da inserire nell'etichetta
  var datiForm = {
    'anno': app.data.datiForm.anno,
    'matricola': app.data.datiForm.matricola,
    'fornitore': app.data.datiForm.fornitore,
    'articolo': app.data.datiForm.articolo,
    'ipStampante': ip_stampante,
    'portaStampante': porta_stampante,
    'modelloStampante': modello_stampante
  };

  var urlWs = app.data.url + "ws/stampa_etichette_qrcode/";

  app.request.promise.post(urlWs, { dati: datiForm })
    .then(function (data) {

      var msg = data.data.trim();
      if (msg != '')
        app.toast.create({
          text: msg,
          position: 'center',
          closeTimeout: 2000,
        }).open();
      back();
    })
    .catch(function (err) {
      Utility.gestisciMessaggioErrore(err);
    });

  app.popup.close('#popupQRCODE');
});

// Click sui pulsanti di stampa presenti nel popup di stampa libera
$$(document).on('click', '.stampa_libera_popup', async function () {

  var dataRevisione = $$('#data_revisione_libera_input').val();
  var dataScadenza = $$('#data_scadenza_revisione_libera_input').val();

  if (dataRevisione === '' || dataScadenza === '') {
    var textAlert = await translateText('lbl57');
    Utility.alertAttenzione(textAlert);
    return;
  }

  var dataCollaudo = $$('#data_collaudo_libera_input').val();
  var dataScadenzaCollaudo = $$('#data_scadenza_collaudo_libera_input').val();

  var numero_etichette = $$('#numero_etichette_input').val();

  var ip_stampante = $$(this).attr("ipStampante");
  var porta_stampante = $$(this).attr("portaStampante");
  var modello_stampante = $$(this).attr("modelloStampante");

  var datiForm = {
    'anno': '',
    'matricola': '',
    'fornitore': '',
    'articolo': '',

    'data_revisione': dataRevisione != '' ? dataRevisione.substring(3, 5) + '/' + dataRevisione.substring(8, 10) : dataRevisione,
    'data_scadenza_revisione': dataScadenza != '' ? dataScadenza.substring(3, 5) + '/' + dataScadenza.substring(8, 10) : dataScadenza,
    'data_collaudo': dataCollaudo != '' ? dataCollaudo.substring(3, 5) + '/' + dataCollaudo.substring(8, 10) : dataCollaudo,
    'data_scadenza_collaudo': dataScadenzaCollaudo != '' ? dataScadenzaCollaudo.substring(3, 5) + '/' + dataScadenzaCollaudo.substring(8, 10) : dataScadenzaCollaudo,

    'ipStampante': ip_stampante,
    'portaStampante': porta_stampante,
    'modelloStampante': modello_stampante
  };

  for (var i = 1; i <= numero_etichette; i++) {
    stampaEtichetteGrandi(datiForm);
  }

  app.calendar.close('#data_revisione_libera_input');
  app.calendar.close('#data_scadenza_revisione_libera_input');
  app.calendar.close('#data_collaudo_libera_input');
  app.calendar.close('#data_scadenza_collaudo_libera_input');
  Utility.resetDateCalendar();
  app.popup.close('#popupRevisioneVuoto');

});

/*
  Il blur nella textinput della data di revisione presente nel popup di stampa libera 
  fa ricalcolare in automatico la data di scadenza della revisione
  */
$$(document).on('blur', '#data_revisione_libera_input', function () {
  // Recupero dinamicamente gli anni da sommare per la scadenza, in base al tipo selezionato tramite i pulsanti
  var tipoScadenza = $$('#tipo_scadenza_selezionato').val();
  if (tipoScadenza != null && tipoScadenza != '') {
    var aa_revisione = $$(`#${tipoScadenza}`).attr("aa_revisione");
    ricalcolaDataScadenza('#data_revisione_libera_input', '#data_scadenza_revisione_libera_input', parseInt(aa_revisione));
  } else ricalcolaDataScadenza('#data_revisione_libera_input', '', '');
});

/*
  Il blur nella textinput della data di collaudo presente nel popup di stampa libera 
  fa ricalcolare in automatico la data di scadenza del collaudo
  */
$$(document).on('blur', '#data_collaudo_libera_input', function () {
  // Recupero dinamicamente gli anni da sommare per la scadenza, in base al tipo selezionato tramite i pulsanti
  var tipoScadenza = $$('#tipo_scadenza_selezionato').val();
  if (tipoScadenza != null && tipoScadenza != '') {
    var aa_collaudo = $$(`#${tipoScadenza}`).attr("aa_collaudo");
    ricalcolaDataScadenza('#data_collaudo_libera_input', '#data_scadenza_collaudo_libera_input', parseInt(aa_collaudo));
  } else ricalcolaDataScadenza('#data_collaudo_libera_input', '', '');
});

// Funzione utilizzata per ricalcolare le date di scadenza in base alle date di riferimento
function ricalcolaDataScadenza(id_TagDataRiferimento, id_TagDataRicalcolata, anniPerScadenza) {

  var data = $$(id_TagDataRiferimento).val();

  var dd = data.split('/')[0].padStart(2, '0');
  var mm = data.split('/')[1].padStart(2, '0');
  var yyyy = data.split('/')[2];

  var dataRiferimento = dd + '/' + mm + '/' + yyyy;
  $$(id_TagDataRiferimento).val(dataRiferimento);

  if (id_TagDataRicalcolata != '' && anniPerScadenza != '') {
    var dataRicalcolata = dd + '/' + mm + '/' + (parseInt(yyyy) + anniPerScadenza);
    $$(id_TagDataRicalcolata).val(dataRicalcolata);
  }
}

$$(document).on('click', '.stampa', function () {
  var datiForm = {
    'anno': $$(this).data('anno'),
    'matricola': $$(this).data('matricola'),
    'fornitore': $$(this).data('fornitore'),
    'articolo': $$(this).data('articolo'),
    'data_collaudo': $$(this).data('data_collaudo'),
    'descr_articolo': $$(this).data('descr_articolo'),
    'car_05': $$(this).data('car_05'),
    'aa_revisione': $$(this).data('aa_revisione'),
    'aa_collaudo': $$(this).data('aa_collaudo'),
  }
  app.data.datiForm = datiForm;
  compilaPopupQRCode();
});

// Popup di inserimento date di revisione/collaudo e rispettive scadenze su etichetta grande
$$(document).on('click', '#stampa_libera_button', function () {
  Utility.resetDateCalendar();
  app.popup.open('#popupRevisioneVuoto');
});

// Disegno dinamicamente i bottoni delle stampanti all'apertura del popup
$$('#popupRevisioneVuoto').on('popup:open', function () {
  Stampanti.disegnaPulsantiStampanti("popupRevisioneVuoto", "inline-container1", "stampa_libera_popup");
});

// Disegno dinamicamente i bottoni delle stampanti all'apertura del popup
$$('#popupQRCODE').on('popup:open', function () {
  Stampanti.disegnaPulsantiStampanti("popupQRCODE", "inline-container", "stampa_etichetta_qrcode");
});

$$(document).on('page:init', '.page[data-name="lista_matricole"]', function (e, page) {
  loadTranslationsAndApply();

  var items = [];

  for (var i = 0; i < app.data.lista_matricole.length; i++) {

    var data_collaudo = app.data.lista_matricole[i].MADAE;
    if (app.data.lista_matricole[i].MADAE == '' || typeof app.data.lista_matricole[i].MADAE === 'undefined' || app.data.lista_matricole[i].MADAE == 0) {
      data_collaudo = app.data.lista_matricole[i].MADAT;
    }

    items.push({
      matricola: app.data.lista_matricole[i].MADE2,
      articolo: app.data.lista_matricole[i].MAART,
      fornitore: app.data.lista_matricole[i].MACTP + '-' + app.data.lista_matricole[i].CORAGS,
      anno: app.data.lista_matricole[i].MADAT,
      data_collaudo: data_collaudo,
      car_05: app.data.lista_matricole[i].ARCA05,
      descr_articolo: app.data.lista_matricole[i].ARDES,
      aa_revisione: app.data.lista_matricole[i].AA_REVISIONE,
      aa_collaudo: app.data.lista_matricole[i].AA_COLLAUDO,
      classe: 'stampa'
    });
  }

  app.virtualList.create({
    el: '.virtual-list',
    items: items,
    searchAll: function (query, items) {
      var found = [];

      for (var i = 0; i < items.length; i++) {
        if (
          items[i].matricola.toLowerCase().indexOf(query.toLowerCase()) >= 0 ||
          items[i].articolo.toLowerCase().indexOf(query.toLowerCase()) >= 0 ||
          items[i].fornitore.toLowerCase().indexOf(query.toLowerCase()) >= 0 ||
          items[i].anno.toLowerCase().indexOf(query.toLowerCase()) >= 0 ||
          query.trim() === '') {
          found.push(i);
        }
      }
      return found;
    },
    itemTemplate:
      `<li>
        <a href="#" class="item-link item-content {{classe}}"  
            data-matricola="{{matricola}}" 
            data-data_collaudo="{{data_collaudo}}" 
            data-articolo="{{articolo}}" 
            data-fornitore="{{fornitore}}" 
            data-anno="{{anno}}" 
            data-descr_articolo="{{descr_articolo}}" 
            data-car_05="{{car_05}}" 
            data-aa_revisione="{{aa_revisione}}" 
            data-aa_collaudo="{{aa_collaudo}}" 
            >
          <div class="item-inner item-cell">
            <div class="item-row">
              <div class="item-cell">{{matricola}}</div>
              <div class="item-cell">{{articolo}}</div>
              <div class="item-cell">{{fornitore}}</div>
              <div class="item-cell">{{anno}}</div>
            </div>
          </div>
        </a>
      </li>`,

    height: app.theme === 'ios' ? 63 : (app.theme === 'md' ? 73 : 46),
  });
});

// Disegno dinamicamente i bottoni per la selezione della caratteristica 5 nella stampa libera
async function disegnaPulsantiCaratteristiche05(app) {
  return new Promise(resolve => {

    // Recupero la <div> che contiene i bottoni e la svuoto
    let buttonContainer = $$('#stampa_libera_car05');
    $$(buttonContainer).empty();

    // Se la caratteristica è solo una, seleziono di default il pulsante
    let totCaratteristiche = app.data.lista_caratteristiche05.length;

    // Ciclo le caratteristiche in memoria e le disegno
    for (const caratteristica of app.data.lista_caratteristiche05) {
      const descrizioneCaratteristica = caratteristica.DESCR_BTN.trim();
      var classButton = 'color-bordered-black';

      if (totCaratteristiche == 1) {
        classButton = 'color-aesse';
        // Valorizzo un input hidden con l'id del tipo scadenza selezionato
        // cosa che non è elegante, ma mi serve per evitare di smontare tutto il resto del codice
        $$('#tipo_scadenza_selezionato').val(`car05_${caratteristica.CACOD}`);
      }

      pulsante = `
      <button 
          id = "car05_${caratteristica.CACOD}"
          cacod = "${caratteristica.CACOD}"
          cades = "${caratteristica.CADES}"
          aa_collaudo = "${caratteristica.AA_COLLAUDO}"
          aa_revisione = "${caratteristica.AA_REVISIONE}"
        class="button button-fill button-round seleziona-caratteristica inline-element ${classButton}">${descrizioneCaratteristica}
      </button>`;


      $$(buttonContainer).append(pulsante);
    }

    app.preloader.hide();
    resolve(true);

  }).catch(function (errore) {
    app.preloader.hide();
    Utility.alertAttenzione(errore);
  });
}

// Gestione delle azioni associate ai pulsanti nel popup di stampa libera
$$(document).on('click', '.seleziona-caratteristica', function () {

  // Gestisco la colorazione dei pulsanti di selezione tipo scadenze
  Utility.toggleStileButton("#" + this.id, 'color-aesse', 'color-bordered-black');

  // Gestisco la visualizzazione dei pulsanti delle stampanti collegate al tipo scadenza selezionato

  // Recupero gli attributi della caratteristica selezionata
  // perchè mi servono per ricalcolare le scadenze
  var cacod = $$(this).attr("cacod");
  var cades = $$(this).attr("cades");
  var aa_collaudo = $$(this).attr("aa_collaudo");
  var aa_revisione = $$(this).attr("aa_revisione");

  // Valorizzo un input hidden con l'id del tipo scadenza selezionato
  // cosa che non è elegante, ma mi serve per evitare di smontare tutto il resto del codice
  $$('#tipo_scadenza_selezionato').val($$(this).attr("id"));

  // SE ho precompilato le date di revisione e collaudo, ricalcolo le relative scadenze
  var dataRevisione = $$('#data_revisione_libera_input').val();
  if (dataRevisione != null && dataRevisione != '')
    ricalcolaDataScadenza('#data_revisione_libera_input', '#data_scadenza_revisione_libera_input', parseInt(aa_revisione));

  var dataCollaudo = $$('#data_collaudo_libera_input').val();
  if (dataCollaudo != null && dataCollaudo != '')
    ricalcolaDataScadenza('#data_collaudo_libera_input', '#data_scadenza_collaudo_libera_input', parseInt(aa_collaudo));
});

async function getArticolo(codArticolo) {
  let url = IP + WS_ARTICOLI.GET_ARTICOLO;
  app.request.post(url,
    { 'codArticolo': codArticolo }
    , function (res) {
      let articolo = JSON.parse(res);
      return (articolo);
    }, function (errore) {
      app.preloader.hide();
      Utility.alertAttenzione(errore);

    });
}
