<!-- Modal Segresta Wallet: richiesta lettura tag NFC -->
<div class="modal fade" id="segrestaWalletModal" tabindex="-1" aria-labelledby="segrestaWalletModalLabel" aria-hidden="true">
  <div class="modal-dialog modal-dialog-centered">
    <div class="modal-content">
      <div class="modal-header bg-primary text-white">
        <h5 class="modal-title" id="segrestaWalletModalLabel">
          Segresta Wallet
        </h5>
        <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Chiudi"></button>
      </div>
      <div class="modal-body text-center">
        <div class="mb-3">
          <i class="bx bx-rfid bx-lg"></i>
        </div>
        <p>
          Avvicina il braccialetto NFC al lettore per pagare con Segresta Wallet.
        </p>
        <div id="nfc-status" class="my-2">
          <span class="badge bg-secondary">In attesa di lettura...</span>
        </div>
        <!-- NOTA: Questo form non va sempre nella cassa: normalmente l'input tag verrà popolato in una form già presente nella view della cassa principale. 
             Il form qui rimane per fallback o testing standalone, ma non invierà il pagamento se incluso sopra una form principale
         -->
        <form id="segrestaWalletForm" action="{{ route('punto-vendita.paga-ordine') }}" method="POST" class="d-none">
          @csrf
          <input type="hidden" name="ordine_id" value="{{ $ordine->id ?? '' }}">
          <input type="hidden" name="metodo_pagamento_id" value="{{ $metodo_pagamento->id ?? '' }}">
          <input type="hidden" name="tag_id" id="tag_id_input" value="">
        </form>
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Annulla</button>
      </div>
    </div>
  </div>
</div>

<script>
/**
 * Quando questa modale viene inclusa nella view della cassa,
 * la lettura del tag NFC popolerà l'input (id/tag_id_input).
 * Attenzione: se esiste un campo input già nella cassa con ID "tag_id_input", verrà popolato quello!
 * Se NON vuoi la form qui, puoi rimuoverla sopra e farla puntare solo agli input esterni.
 */
document.addEventListener("DOMContentLoaded", function() {
    let nfcAbortController = null;
    function resetNfcStatus() {
        document.getElementById('nfc-status').innerHTML = '<span class="badge bg-secondary">In attesa di lettura...</span>';
        // Reset sia l'input della modale che quello presente nella view principale (se esiste)
        if(document.getElementById('tag_id_input')) document.getElementById('tag_id_input').value = '';
    }
    function readNfc() {
        if (!('NDEFReader' in window)) {
            document.getElementById('nfc-status').innerHTML = '<span class="badge bg-danger">NFC non supportato su questo dispositivo/browser</span>';
            return;
        }
        nfcAbortController = new AbortController();
        const reader = new NDEFReader();
        reader.scan({signal: nfcAbortController.signal}).then(() => {
            document.getElementById('nfc-status').innerHTML = '<span class="badge bg-warning text-dark">Avvicina ora il braccialetto al lettore...</span>';
            reader.onreading = event => {
                const { serialNumber, message } = event;
                let tagId = serialNumber;
                // Popola SEMPRE l'input con id tag_id_input visibile nella pagina (view cassa o fallback in modale)
                // Se presente nella view principale, popoliamo direttamente quello
                let tagInput = document.getElementById('tag_id_input');
                if (tagInput) tagInput.value = tagId;

                document.getElementById('nfc-status').innerHTML = '<span class="badge bg-success">Braccialetto letto! Puoi confermare il pagamento.</span>';

                // Se siamo in presenza del form nascosto (la modale lavora in standalone), invialo (old behavior).
                // Se invece esiste una form principale nella cassa, sarà la sua logica a inviare.
                let modalForm = document.getElementById('segrestaWalletForm');
                if (modalForm && modalForm.classList.contains('d-none')) {
                  // Lo inviamo solo se non c'è una view cassa esterna da gestire (quindi fallback).
                  setTimeout(() => {
                    modalForm.submit();
                  }, 700);
                  // disabilita la lettura per questa istanza
                  nfcAbortController.abort();
                }
            };
            reader.onerror = event => {
                document.getElementById('nfc-status').innerHTML = '<span class="badge bg-danger">Errore nella lettura NFC</span>';
            };
        }).catch(err => {
            document.getElementById('nfc-status').innerHTML = '<span class="badge bg-danger">Impossibile avviare la lettura NFC: ' + err.message + '</span>';
        });
    }

    // All'apertura modale: resetta e avvia la lettura NFC
    var modal = document.getElementById('segrestaWalletModal');
    modal.addEventListener('show.bs.modal', function () {
        resetNfcStatus();
        readNfc();
    });
    // Alla chiusura modale: annulla lettura NFC e resetta stato
    modal.addEventListener('hide.bs.modal', function () {
        if(nfcAbortController) nfcAbortController.abort();
        resetNfcStatus();
    });
});
</script>