
{{ $dataTable_rigaordine->scripts(attributes: ['type' => 'module']) }}

<script>
const initialOrdineId = Number("{{ $ordine->id ?? 0 }}") || null;
let currentOrdineId = initialOrdineId;

function getOrdineId() {
    return currentOrdineId ?? initialOrdineId;
}

        document.querySelectorAll('.piatto-card, .cassa-piatto-card, .cassa-sb-product').forEach(function (card) {
            card.addEventListener('click', function () {
                const piattoId = card.getAttribute('data-piatto-id');
            aumentaQuantita(piattoId);
            aggiornaCarrello();
        });
    });



function aumentaQuantita(piattoId, rigaOrdineId) {
    $.ajax({
        url: "{{ route('carrello.aumenta') }}",
        type: "POST",
        data: {
            piatto_id: piattoId,
            riga_ordine_id: rigaOrdineId,
            aumenta: true,
            _token: "{{ csrf_token() }}",
            dispositivo_id: "{{ $punto_vendita->id }}",
            attivita_id: "{{ $punto_vendita->attivita_id }}",
            ordine_id: getOrdineId(),
        },
        success: function(response) {
            if (response && response.ordine_id) {
                currentOrdineId = Number(response.ordine_id) || currentOrdineId;
            }
            aggiornaCarrello();
        },
        error: function(xhr, status, error) {
            console.log(xhr.responseText);
        }
    });
}

function diminuisciQuantita(piattoId, rigaOrdineId) {
    $.ajax({
        url: "{{ route('carrello.diminuisci') }}",
        type: "POST",
        data: {
            piatto_id: piattoId,
            riga_ordine_id: rigaOrdineId,
            diminuisci: true,
            _token: "{{ csrf_token() }}",
            dispositivo_id: "{{ $punto_vendita->id }}",
            attivita_id: "{{ $punto_vendita->attivita_id }}",
            ordine_id: getOrdineId(),
        },
        success: function(response) {
            aggiornaCarrello();
        },
        error: function(xhr, status, error) {
            console.log(xhr.responseText);
        }
    });
}

function eliminaRiga(piattoId, rigaOrdineId) {
    $.ajax({
        url: "{{ route('carrello.elimina') }}",
        type: "POST",
        data: {
            piatto_id: piattoId,
            elimina: true,
            riga_ordine_id: rigaOrdineId,
            _token: "{{ csrf_token() }}",
            dispositivo_id: "{{ $punto_vendita->id }}",
            attivita_id: "{{ $punto_vendita->attivita_id }}",
            ordine_id: getOrdineId(),
        },
        success: function(response) {
            aggiornaCarrello();
        },
        error: function(xhr, status, error) {
            console.log(xhr.responseText);
        }
    });
}
function aggiungiNota(piattoId, rigaOrdineId, nota, piattoNome) {
    Swal.fire({
        title: "Aggiungi nota",
        text: piattoNome != null ? "Nota per " + piattoNome : "Inserisci la nota",
        input: "text",
        inputValue: nota,
        inputPlaceholder: "Inserisci la nota",
        icon: "info",
        showCancelButton: true,
        confirmButtonText: "Salva",
        denyButtonText: "Elimina",
        showDenyButton: true,
        cancelButtonText: "Annulla",
        customClass: {
           confirmButton: "btn btn-primary",
           denyButton: "btn btn-danger",
           cancelButton: "btn btn-secondary",
        },
        preConfirm: (value) => {
            return value; // qui puoi validare il valore se necessario
        }
   
    }).then(function(result) {
        if (result.isConfirmed) {
            // Qui recuperi il valore dell'input
            var nota = result.value;
            aggiornaNota(piattoId, rigaOrdineId, nota);
        }
        if(result.isDenied) {
          aggiornaNota(piattoId, rigaOrdineId, null);
        }
    });
}
function aggiornaNota(piattoId, rigaOrdineId, nota) {
    $.ajax({
        url: "{{ route('carrello.aggiorna_nota') }}",
        type: "POST",
        data: {
            piatto_id: piattoId,
            note: nota,
            riga_ordine_id: rigaOrdineId,
            _token: "{{ csrf_token() }}",
        },
        success: function(response) {
            if(response.success){
                new Notyf({
                    duration: 2000,
                    position: { x: 'right', y: 'top' },
                    ripple: false,
                }).success(response.message);
                aggiornaCarrello();
            }
        },
        error: function(xhr, status, error) {
            new Notyf({
                duration: 2000,
                position: { x: 'right', y: 'top' },
                ripple: false,
            }).error(xhr.responseText);
        }
    });
}

function getVariantiPiatto(rigaOrdineId) {
  var result = null;
  $.ajax({
    url: "{{ route('variante-piatto.list') }}",
    type: "GET",
    async: false,
    data: {
      riga_ordine_id: rigaOrdineId,
    },
    success: function(response) {
      result = response;
    },
    error: function(xhr, status, error) {
      console.log(xhr.responseText);
    }
  });
  return result;
}

function eliminaVariante(rigaOrdineId, varianteId) {
  $.ajax({
    url: "{{ route('carrello.elimina-variante') }}",
    type: "POST",
    data: {
      riga_ordine_id: rigaOrdineId,
      variante_id: varianteId,
      _token: "{{ csrf_token() }}",
    },
    success: function(response) {
      if(response.success){
        new Notyf({
          duration: 2000,
          position: { x: 'right', y: 'top' }
        }).success(response.message);
        aggiornaCarrello();
      }
    },
    error: function(xhr, status, error) {
      new Notyf({
        duration: 2000,
        position: { x: 'right', y: 'top' }
      }).error(xhr.responseText);
    }
  });
}


function aggiungiVariante(piattoId, rigaOrdineId, piattoNome, nota, cucinaId) { 
nota = null;
  var varianti = getVariantiPiatto(rigaOrdineId);
  if (!varianti) {
  varianti = { variantiCucina: [], variantiPiatto: [] };
}

  var html = '';

if (varianti.variantiCucina.length > 0) {
  html += '<h4>Varianti cucina</h4><div class="d-flex flex-wrap gap-2 mb-2">';
  varianti.variantiCucina.forEach(function (v) {
    html += '<span class="variante-chip" data-id="' + v.id + '" data-label="' + v.label + '" style="display:inline-block;padding:6px 10px;border-radius:999px;border:1px solid #0d6efd;cursor:pointer;background:#fff;color:#0d6efd;">' +
      v.label + ' (' + (v.prezzo ?? '0.00') + ' €)</span>';
  });
  html += '</div>';
}

if (varianti.variantiPiatto.length > 0) {
  html += '<h4>Varianti piatto</h4><div class="d-flex flex-wrap gap-2 mb-2">';
  varianti.variantiPiatto.forEach(function (v) {
    html += '<span class="variante-chip" data-id="' + v.id + '" data-label="' + v.label + '" style="display:inline-block;padding:6px 10px;border-radius:999px;border:1px solid #0d6efd;cursor:pointer;background:#fff;color:#0d6efd;">' +
      v.label + ' (' + (v.prezzo ?? '0.00') + ' €)</span>';
  });
  html += '</div>';
}

html += '<h4>Nota</h4>';
html += '<input id="swal-variante-nota" class="form-control" value="' + (nota || '') + '">';

  Swal.fire({
    title: "Variante",
    text: "Variazione per "+piattoNome,
    icon: "question",
    html: html,
    showCloseButton: true,
    showCancelButton: true,
    cancelButtonText: "Annulla",
    confirmButtonText: "Aggiungi varianti selezionate",
    showDenyButton: false,
    denyButtonText: "Dividi l'ordine in singoli piatti (tutti con questa nota)",
    customClass: {
      confirmButton: "btn btn-success",
      denyButton: "btn btn-primary",
      cancelButton: "btn btn-secondary",
    },
    preDeny: function () {
  return this.preConfirm ? this.preConfirm() : null;
},
    preConfirm: function () {
  const root = Swal.getHtmlContainer();
  const selected = root ? root.querySelector('.variante-chip.is-selected') : null;
  const notaInput = root ? root.querySelector('#swal-variante-nota') : null;

  const varianteId = selected ? selected.getAttribute('data-id') : null;
  const varianteLabel = selected ? selected.getAttribute('data-label') : '';
  const notaLibera = notaInput ? notaInput.value.trim() : '';
  const notaFinale = [varianteLabel, notaLibera].filter(Boolean).join(' - ');

  return {
    variante_id: varianteId,
    nota: notaFinale
  };
},
    didOpen: function () {
  const root = Swal.getHtmlContainer();
  if (!root) return;

  root.querySelectorAll('.variante-chip').forEach(function (chip) {
    chip.addEventListener('click', function () {
      root.querySelectorAll('.variante-chip').forEach(function (c) {
        c.classList.remove('is-selected');
        c.style.background = '#fff';
        c.style.color = '#0d6efd';
      });
      chip.classList.add('is-selected');
      chip.style.background = '#0d6efd';
      chip.style.color = '#fff';

    });
  });
},

  }).then((result) => {
    const payload = result.value || {};
    if (result.isConfirmed) {
      $.ajax({
    url: "{{ route('carrello.aggiungi-variante') }}",
    type: "POST",
    async: false,
    data: {
      tipo:  'singolo',
      piatto_id: piattoId,
      riga_ordine_id: rigaOrdineId,
      _token: "{{ csrf_token() }}",
      variante_id: payload.variante_id,
nota: payload.nota,
    },
    success: function(response) {
      if(response.success){
        new Notyf({
          duration: 2000,
          position: { x: 'right', y: 'top' }
        }).success(response.message);
        aggiornaCarrello();
      } else {
        new Notyf({
          duration: 2000,
          position: { x: 'right', y: 'top' }
        }).error(response.message);
      }
    },
    error: function(xhr, status, error) {
      new Notyf({
        duration: 2000,
        position: { x: 'right', y: 'top' }
      }).error(xhr.responseJSON.message);
    }
  });
    } else if (result.isDenied) {
      $.ajax({
    url: "{{ route('carrello.aggiungi-variante') }}",
    type: "POST",
    async: false,
    data: {
      tipo:  'tutti',
      piatto_id: piattoId,
      riga_ordine_id: rigaOrdineId,
      variante_id: payload.variante_id,
nota: payload.nota,
      _token: "{{ csrf_token() }}",
    },
    success: function(response) {
      if(response.success){
        new Notyf({
          duration: 2000,
          position: { x: 'right', y: 'top' }
        }).success(response.message);
        aggiornaCarrello();
      } else {
        new Notyf({
          duration: 2000,
          position: { x: 'right', y: 'top' }
        }).error(response.message);
      }
    },
    error: function(xhr, status, error) {
      new Notyf({
        duration: 2000,
        position: { x: 'right', y: 'top' }
      }).error(xhr.responseJSON.message);
    }
  });
    }
    // Se annullato non fai nulla
  });
}

function aggiungiVariantePiatto(tipo, piattoId, rigaOrdineId) {
  $.ajax({
    url: "{{ route('carrello.aggiungi-variante') }}",
    type: "POST",
    async: false,
    data: {
      tipo:  tipo,
      piatto_id: piattoId,
      riga_ordine_id: rigaOrdineId,
      _token: "{{ csrf_token() }}",
      success: function(response) {
        if(response.success){
          result = response;
        }else{
          result = false;
        }
      },
      error: function(xhr, status, error) {
        throw new Error(xhr.responseJSON.message);
      }
    },
  });
  return result;
}

function aggiornaCarrello() {

    // window.LaravelDataTables["dataTable_rigaordine"].ajax.reload()
    window.LaravelDataTables["dataTable_rigaordine"].ajax.reload(function() {
        // Dopo il reload, chiama la funzione di init complete se esiste
        if (typeof initComplete_rigaordine === "function") {
            initComplete_rigaordine();
        }
        if (typeof cassaSyncCartScroll === "function") {
            cassaSyncCartScroll();
        }
    });
    aggiornaTotaleCarrello();

}



function azzeraCarrello(){
    Swal.fire({
        title: "Svuota carrello",
        text: "Sei sicuro di voler svuotare il carrello?",
        icon: "warning",
        showCancelButton: true,
        confirmButtonText: "Svuota",
        cancelButtonText: "Annulla",
        confirmButtonColor: "#d33",
        cancelButtonColor: "#3085d6"
    }).then((result) => {
        if (result.isConfirmed) {
            azzeraCarrelloAjax();
        }
    });
}
function azzeraCarrelloAjax() {
    $.ajax({
        url: "{{ route('carrello.azzera') }}",
        type: "POST",
        data: {
            dispositivo_id: "{{ $punto_vendita->id }}",
            attivita_id: "{{ $punto_vendita->attivita_id }}",
            ordine_id: getOrdineId(),
            _token: "{{ csrf_token() }}",
        },
        success: function(response) {
            if(response.success){
                new Notyf({
                    duration: 2000,
                    position: { x: 'right', y: 'top' }
                }).success(response.message);
                window.location.reload();
            }else{
                Swal.fire({
                    title: "Errore",
                    text: response.message,
                    icon: "error",
                });
            }
          
        },
        error: function(xhr, status, error) {
            // console.log(xhr.responseText);
            Swal.fire({
                title: "Errore",
                text: "Si è verificato un errore",
                icon: "error",
                body: xhr.responseText,
            });
        }
    });
}


// function initComplete_rigaordine() {
//     $('div.dt-buttons button').removeClass('btn-secondary');
//     $('div.dt-search').addClass('mt-0 mb-4');
//     return;
// }
</script>


<script type="module">
  $(document).ready(function(){
    $("#cliente").on('change', function() {
      aggiornaInfoOrdine();
    });
    $("#tavolo").on('change', function() {
      aggiornaInfoOrdine();
    });
    $("#coperti").on('change', function() {
      aggiornaInfoOrdine();
    });
    

        // Editor edit
    $("#dataTable_rigaordine").on('click', 'a.editor_edit', function (e) {
      e.preventDefault();
      window.LaravelDataTables["dataTable_rigaordine-editor"].edit( $(this).closest('tr'), {
        title: 'Modifica',
        buttons: 'Aggiorna',
      });
    });

    // Editor delete
    $("#dataTable_rigaordine").on('click', 'a.editor_delete', function (e) {
      e.preventDefault();
      window.LaravelDataTables["dataTable_rigaordine-editor"].remove($(this).closest('tr'), {
        title: 'Cancella record',
        message: 'Sei sicuro di voler eliminare il record selezionato?',
        buttons: 'Cancella record'
      });
    } );

    $("#dataTable_rigaordine").on('dblclick', 'tbody td', function (e) {
      window.LaravelDataTables["dataTable_rigaordine-editor"].edit( $(this).closest('tr'), {
        title: 'Modifica',
        buttons: 'Aggiorna',
      });
    });

    // Handle collapse/expand of child rows in DataTable
    $('#dataTable_rigaordine tbody').on('click', 'td.details-control', function () {
      var tr = $(this).closest('tr');
      var row = window.LaravelDataTables["dataTable_rigaordine"].row(tr);

      if (row.child.isShown()) {
        // Collapse child row
        row.child.hide();
        tr.removeClass('shown');
      }
      else {
        // Expand child row
        row.child('<div class="loading">Caricamento...</div>').show();
        tr.addClass('shown');
        // Optionally load remote data via AJAX here and update row.child()
        $.get("{{ route('riga-ordine.dettagli') }}?riga_ordine_id="+row.data().id, function(data) {
          row.child(data).show();
        });
      }
    });

  });

</script>

<script>
  function initComplete_rigaordine(){
    var $ = window.jQuery || window.$;
    if (!$) {
      cassaSyncCartScroll();
      return;
    }

    $('div.dt-buttons button').removeClass('btn-secondary');
    $('div.dt-search').addClass('mt-0 mb-2');
    $('div.dt-buttons').removeClass('btn-group');
    $('.dt-type-numeric').each(function() {
      $(this).removeClass('dt-type-numeric');
    });
    $('table.dataTable tbody').css('border-style', 'none !important');
    aggiornaTotaleCarrello();
    $(".dt-empty").text("Carrello vuoto");
    $('.mb-6 .card').addClass('shadow-none');
    $('.mb-6').removeClass('mb-6');
    cassaSyncCartScroll();

    @if(isset($vista) && $vista == 'catalogo')
      $('table').removeClass('datatable table dt-inline');
    @endif

}

  function cassaSyncCartScroll() {
    var card = document.querySelector('.cassa-cart-card');
    var el = document.querySelector('.cassa-cart-scroll');
    if (!card || !el) {
      return;
    }
    el.style.flex = '0 1 auto';
    el.style.maxHeight = '';
    el.style.overflowY = 'auto';

    window.requestAnimationFrame(function() {
      var dt = window.LaravelDataTables && window.LaravelDataTables['dataTable_rigaordine'];
      if (dt && typeof dt.columns !== 'undefined') {
        dt.columns.adjust();
      }
    });
  }

  window.addEventListener('resize', cassaSyncCartScroll);
  window.addEventListener('load', cassaSyncCartScroll);

  function aggiornaTotaleCarrello() {
    $.ajax({
      url: "{{ route('carrello.totale') }}",
      type: "GET",
      data: {
        dispositivo_id: "{{ $punto_vendita->id }}",
        attivita_id: "{{ $punto_vendita->attivita_id }}",
        ordine_id: getOrdineId(),
      },
      success: function(response) {
        // alert(response.data);
        // $('#totale_carrello').text('€ ' + response.data.toFixed(2));
      // Animazione al cambio del prezzo del carrello
      var $totale = $('#totale_carrello');
      $totale.fadeOut(200, function() {
        $totale.text('€ ' + response.totale.toFixed(2).replace('.', ','));
        $totale.fadeIn(200);
      });
      var $kioskPz = $('#kiosk_carrello_n_pz');
      var $kioskTot = $('#kiosk_carrello_totale');
      if ($kioskPz.length && response.quantita_totale !== undefined) {
        $kioskPz.text(response.quantita_totale + ' pz.');
      }
      if ($kioskTot.length) {
        $kioskTot.fadeOut(150, function() {
          $kioskTot.text('€ ' + response.totale.toFixed(2).replace('.', ','));
          $kioskTot.fadeIn(150);
        });
      }
      },
      error: function(xhr, status, error) {
        console.log(xhr.responseText);
      }
    });
  }

  function aggiornaInfoOrdine() {

    $.ajax({
      url: "{{ route('carrello.aggiorna_info') }}",
      type: "POST",
      data: {
        ordine_id: getOrdineId(),
        cliente: $("#cliente").val(),
        tavolo: $("#tavolo").val(),
        coperti: $("#coperti").val(),
        _token: "{{ csrf_token() }}",
      },
      success: function(response) {
        if(response.success){
          if (typeof Notyf !== 'undefined') {
            // Usa Notyf per la notifica
            new Notyf({
              duration: 2000,
              position: { x: 'right', y: 'top' }
            }).success(response.message);
            
          } else {
            // Fallback su Swal se Notyf non è disponibile
            Swal.fire({
              toast: true,
              showConfirmButton: false,
              showCancelButton: false,
              timerProgressBar: true,
              type: 'success',
              background: 'success',
              position: 'top-end',
              title: response.message,
              // icon: 'success',
            });
          }
        }else{
          Swal.fire({
            toast: true,
            title: response.message,
            icon: 'error',
          });
        }
      },
      error: function(xhr, status, error) {
        console.log(xhr.responseText);
      }
    });
  }

  function checkout() {
    const url = "{{ route('carrello.checkout') }}" + "?" + $.param({
      ordine_id: getOrdineId(),
      dispositivo_id: "{{ $punto_vendita->id }}",
      attivita_id: "{{ $punto_vendita->attivita_id }}"
    });
    $('#modalPagamento .modal-body').load(url);
    $('#modalPagamento').modal('show');
  }

function showInfoPuntoVendita() {
  $('#basicModal .modal-body').load("{{ route('punto-vendita.dettagli', ['punto_vendita_id' => $punto_vendita->id]) }}");
  $('#basicModal .modal-title').text("Informazioni punto vendita");
  $('#basicModal').modal('show');
}
function stampaRiepilogo() {
  $('#basicModal .modal-body').load("{{ route('punto-vendita.riepilogo-cassa', ['punto_vendita_id' => $punto_vendita->id]) }}");
  $('#basicModal .modal-title').text("Riepilogo incassi punto vendita");
  $('#basicModal').modal('show');
}
</script>