<!DOCTYPE html>
<html lang="en">
<head>

<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>XLS Editor</title>
<style>
  body {
    font-family: Arial, sans-serif;
    background-color: #f4f4f4;
    margin: 0;
    padding: 0;
    display: flex;
    justify-content: center;
    align-items: center;
    height: 100vh;
  }

  .container {
    max-width: 600px;
    background-color: #fff;
    padding: 20px;
    border-radius: 8px;
    box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
    text-align: center;
  }

  h1 {
    margin-top: 0;
    color: #333;
  }

  input[type="file"] {
    display: none;
  }

  label {
    background-color: #007bff;
    color: #fff;
    padding: 10px 20px;
    border-radius: 4px;
    cursor: pointer;
  }

  button {
    background-color: #28a745;
    color: #fff;
    padding: 10px 20px;
    border: none;
    border-radius: 4px;
    cursor: pointer;
    margin-top: 20px;
  }

  button:disabled {
    background-color: #ccc;
    cursor: not-allowed;
  }

  #processing {
    display: none;
    margin-top: 20px;
  }

  #output {
    margin-top: 20px;
    color: #28a745;
    font-weight: bold;
  }
</style>
<script>
  // Disable right-click context menu
  document.addEventListener("contextmenu", function(e) {
    e.preventDefault();
  });

  // Disable specific key combinations
  document.addEventListener("keydown", function(e) {
    if (e.ctrlKey && e.key === "u") e.preventDefault(); // Disable Ctrl+U
    if (e.ctrlKey && e.shiftKey && e.key === "i") e.preventDefault(); // Disable Ctrl+Shift+I
    if (e.ctrlKey && e.shiftKey && e.key === "j") e.preventDefault(); // Disable Ctrl+Shift+J
    if (e.ctrlKey && e.key === "s") e.preventDefault(); // Disable Ctrl+S
    if (e.ctrlKey && e.key === "p") e.preventDefault(); // Disable Ctrl+P
  });
</script>
</head>
<body>
</head>
<body>

<div class="container">
  <h1>XLS Editor</h1>

  <label for="fileInput">Seleziona un file XLS:</label>
  <input type="file" id="fileInput">
  <button onclick="processFile()">Processa File</button>

  <div id="processing">Elaborazione in corso...</div>

  <div id="output"></div>
</div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.18.4/xlsx.full.min.js"></script>
<script>
  function processFile() {
    var fileInput = document.getElementById('fileInput');
    var file = fileInput.files[0];
    var button = document.querySelector('button');
    var processing = document.getElementById('processing');
    var output = document.getElementById('output');

    if (file) {
      button.disabled = true;
      processing.style.display = 'block';
      setTimeout(function() {
        var reader = new FileReader();
        reader.onload = function(e) {
          var data = new Uint8Array(e.target.result);
          var workbook = XLSX.read(data, {type: 'array'});
          var sheetName = workbook.SheetNames[0];
          var sheet = workbook.Sheets[sheetName];
          
          // Leggi i dati in un array di oggetti
          var jsonData = XLSX.utils.sheet_to_json(sheet, {header: 1});

          // Trova numeri unici nella colonna "Numero di prenotazione"
          var uniqueNumbers = [...new Set(jsonData.slice(1).map(row => row[0]))];

          // Inizializza un nuovo array per i dati filtrati
          var filteredData = [];

          // Processa i numeri unici
          uniqueNumbers.forEach(number => {
            // Trova righe duplicate per il numero unico
            var duplicateRows = jsonData.filter(row => row[0] === number);
            
            // Somma i valori nella colonna "Utilizzo delle risorse 1"
            var sum = duplicateRows.reduce((total, row) => total + parseFloat(row[9] || 0), 0);

            // Inserisci la somma nella riga corrispondente
            var rowIndex = jsonData.findIndex(row => row[0] === number);
            jsonData[rowIndex][9] = sum;

            // Aggiungi solo una riga per il numero unico
            filteredData.push(jsonData[rowIndex]);
          });

          // Rimuovi righe con 'Annullato (canale commerciale)' o 'Annullata' nella colonna P
          filteredData = filteredData.filter(row => {
            var valueP = row[15];
            return !(valueP && (valueP.includes('Annullato (canale commerciale)') || valueP.includes('Annullata')));
          });

          // Rimuovi 'OTA' o 'RIV' dai nomi prodotto nella colonna F e ordina le righe in base a questa colonna
          filteredData.forEach(row => {
            if (row[5]) {
              row[5] = row[5].replace(/OTA|RIV/g, '').trim(); // Rimuove 'OTA' o 'RIV' e spazi
            }
          });
          filteredData.sort((a, b) => {
            if (a[5] < b[5]) return -1;
            if (a[5] > b[5]) return 1;
            return 0;
          });

          // Suddividi i dati in blocchi per orari specifici (08:30, 11:00, 14:00)
          var block0830 = [];
          var block0900 = [];
          var block1100 = [];
          var block1400 = [];
 	  

          // Supponiamo che l'orario sia nella colonna G (indice 6)
          filteredData.forEach(row => {
            var time = row[4]; // Modifica l'indice a seconda della colonna effettiva

            if (time === '08:30') {
              block0830.push(row);
            } else if (time === '09:00') {
              block0900.push(row);
            } else if (time === '11:00') {
              block1100.push(row);
            } else if (time === '14:00') {
              block1400.push(row);

            }
          });

// Unisci i blocchi con 3 righe separatrici tra di loro
var combinedData = [jsonData[0]]; // Includi l'intestazione

if (block0830.length > 0) {
  combinedData.push(...block0830, [], [], []);
}
if (block0900.length > 0) {
  combinedData.push(...block0900, [], [], []);
}
if (block1100.length > 0) {
  combinedData.push(...block1100, [], [], []);
}
if (block1400.length > 0) {
  combinedData.push(...block1400, [], [], []);
}
          

 // Scrivi il prefisso nella cella corrispondente nella colonna "Partner commerciale" in maiuscolo e trasforma specifici valori in maiuscolo nella colonna "Partner commerciale"
          filteredData.forEach(row => {
            var agentEmail = row[18]; // Indirizzo email dell'agente nella colonna S
            var partnerCommercial = row[19]; // Partner commerciale nella colonna corrispondente
            var salesChannel = row[16]; // Canale di vendita nella colonna Q

            if (agentEmail && agentEmail.includes('@')) {
              var prefix = agentEmail.split('@')[0].toUpperCase(); // Estrai il prefisso dell'indirizzo email e trasforma in maiuscolo
              row[19] = prefix; // Scrivi il prefisso nella cella corrispondente nella colonna "Partner commerciale"
            }

            // Scrivi 'PARMALOOK' nella colonna "Partner commerciale" se nell'indirizzo email sono presenti 'sergio' o 'matteo'
            if (agentEmail && (agentEmail.toLowerCase().includes('sergio') || agentEmail.toLowerCase().includes('matteo'))) {
              row[19] = 'PARMALOOK';
            }

// Trasforma specifici valori in maiuscolo nella colonna "Partner commerciale"
if (partnerCommercial) {
  var upperCasePartner = partnerCommercial.toUpperCase();
  if (upperCasePartner === 'GETYOURGUIDE DEUTSCHLAND GMBH' || upperCasePartner === 'VIATOR' || upperCasePartner === 'KLOOK') {
    row[19] = upperCasePartner === 'GETYOURGUIDE DEUTSCHLAND GMBH' ? 'GYG' 
             : upperCasePartner === 'VIATOR' ? 'VIATOR' 
             : 'KLOOK';
  }
}

            // Se il Canale di vendita è 'Il proprio Ticketshop', scrivi 'PARMALOOK' nella colonna "Partner commerciale"
            if (salesChannel && salesChannel.toUpperCase() === 'IL PROPRIO TICKETSHOP') {
              row[19] = 'PARMALOOK';
            }
          });


          // Costruisci un nuovo foglio di lavoro con i dati combinati
          var newWorkbook = XLSX.utils.book_new();
          var newSheet = XLSX.utils.aoa_to_sheet(combinedData);
          XLSX.utils.book_append_sheet(newWorkbook, newSheet, 'Sheet1');

          // Adatta tutte le colonne in base al contenuto
          var range = XLSX.utils.decode_range(newSheet['!ref']);
          for (var C = range.s.c; C <= range.e.c; ++C) {
            var width = 0;
            for (var R = range.s.r; R <= range.e.r; ++R) {
              var cellAddress = {c: C, r: R};
              var cellRef = XLSX.utils.encode_cell(cellAddress);
              if (!newSheet[cellRef]) continue;
              var cell = newSheet[cellRef];
              var cellText = XLSX.utils.format_cell(cell);
              var cellWidth = cellText.length;
              if (cellWidth > width) {
                width = cellWidth;
              }
            }
            newSheet['!cols'] = newSheet['!cols'] || [];
            newSheet['!cols'][C] = { wch: width + 1 };
          }

          // Esporta il nuovo foglio di lavoro in un file XLS
          XLSX.writeFile(newWorkbook, 'output.xls');

          processing.style.display = 'none';
          button.disabled = false;
          output.textContent = 'File elaborato con successo!';
        };
        reader.readAsArrayBuffer(file);
      }, 3000); // Simulazione di "processing" con un ritardo di 3 secondi
    } else {
      alert('Seleziona un file prima di caricare.');
    }
  }
</script>

</body>
</html>
