const csvForme = document.getElementById('myForm')
const csvFile = document.getElementById('csvFile')
let dataG
let dataD
let Ids

csvForme.addEventListener('submit', function (e) {
  e.preventDefault()

  const csvInput = csvFile.files[0]

  const reader = new FileReader()
  reader.onload = async function (event) {
    const csvText = event.target.result
    const csvData = await csvToArray(csvText)
    var number = 0
    const total = csvData.length
    let in_data = []
    let defected_data = []
    let missing_data = []
    
    do {
      if (csvData.length > 20) {
        const sendData = csvData.splice(0, 20)
        const request = await sendEntries(sendData)
        if (request.success) {
            
          in_data = in_data.concat(request.approuved)
          defected_data = defected_data.concat(request.defect)
          missing_data = missing_data.concat(request.missing)
          
          const current = number
          number = number + 20
          console.log('success', current, number)
          document.getElementById('query').innerHTML +=
            '<p>donées ajouté de ' +
            current +
            ' à ' +
            number +
            ' sur ' +
            total +
            'entrées</p><br/>'
        } else {
          const current = number
          number = number + 20
          console.log('error', current, number)
          document.getElementById('query').innerHTML +=
            '<p>erreur de donées de ' +
            current +
            ' à ' +
            number +
            ' sur ' +
            total +
            'entrées</p><br/>'
        }
        await new Promise((resolve) => setTimeout(resolve, 500))
      } else {
          
        const sendData = csvData.splice(0, csvData.length)
        const request = await sendEntries(sendData)
        if (request.success) {
          in_data = in_data.concat(request.approuved)
          defected_data = defected_data.concat(request.defect)
          missing_data = missing_data.concat(request.missing)
          alert('done :' + (number + sendData.length) + ' entries')
        }
      }
    } while (csvData.length)
    await exportToCsv(in_data, 'success')
    await exportToCsv(defected_data, 'defect')
    await exportToCsv(missing_data, 'missing')
  }
    
    
  reader.readAsText(csvInput)
})

async function csvToArray(str, delimiter = ',') {
  const newHeader = str.slice(0, str.indexOf('\n'))
  const newHeaderRemastered = newHeader.replace(/(, )/g, ' ')
  const headerFormatted = newHeaderRemastered.replace(/"/g, '').split(delimiter)
  let arrayMegreable = []
        do{
            const index = str.indexOf('\n')
            let newRows = str.slice(0, str.indexOf('\n') + 1)
            const rowsFormatted = newRows.replace(/"/g, '')
            let addCommaToRows = rowsFormatted.replace(/(\n)/g, ',')
            let finalCsvArray = addCommaToRows.split(delimiter)
          
            // const removeElement = record.splice(0, 3)
            arrayMegreable.push(finalCsvArray)
            str = str.slice(str.indexOf('\n') + 1)
        }
        while(str.length)
    return arrayMegreable
}

async function exportToCsv (arrayToExport, dataName) {
  var CsvString = "";
  arrayToExport.forEach(function(RowItem, RowIndex) {
    RowItem.forEach(function(ColItem, ColIndex) {
      CsvString += ColItem + ',';
    });
    CsvString += "\r\n";
  });
  CsvString = "data:application/csv," + encodeURIComponent(CsvString);
  var x = document.createElement("A");
  x.setAttribute("href", CsvString );
  x.setAttribute("download", dataName+".csv");
  document.body.appendChild(x);
  x.click();
  
  return true
}

function onlyUnique(value, index, self) {
  return self.indexOf(value) === index
}

function formatArrayLength(array, length) {
  return array
}

function testBase() {
  const result = $.ajax({
    type: 'POST',
    url: 'test_base_connexion.php',
    cache: false,
    success: function (response) {
      alert(response)
    },
  })
}

function sendEntries(array) {
  const result = $.ajax({
    type: 'POST',
    url: 'check_data.php',
    cache: false,
    data: { data: array },

    success: function (response) {
      return response
    },
  })
  return result ? result : { error: 500 }
}

function getDataEntries (){
    const result = $.ajax({
        type: 'GET',
        url: 'get_dual.php',
        cache:false,
        
        success: async function (response) {
            const mergedData = mergeArray(response.data, response.data2)
            const dataGuarded = reduceArrayToUnique(mergedData)
            
            let dataToDelete = mergedData.filter(data => !dataGuarded.includes(data))
            await createCsvDelete(dataToDelete)
            await createCsvDelete(dataGuarded)
            let idToDelete = createArrayId(dataToDelete)
            
            dataG = dataGuarded
            dataD = dataToDelete
            Ids = idToDelete
            
            var element = document.createElement("button")
            const node = document.createTextNode("Supprimer doublon");
            element.appendChild(node)
            element.addEventListener("click", function handleClick(event) {
                deleteDataEntries(Ids)
            })
            document.getElementById('action').appendChild(element)
        }
    })
}

async function deleteDataEntries(dataToRm){
    var number = 0
    const total = dataToRm.length
    do {
      if (dataToRm.length > 20) {
        const sendData = dataToRm.splice(0, 20)
        const request = await deleteArrayOfId(sendData)
        console.log(request)
        if (request.success) {
          const current = number
          number = number + 20
          console.log('success', current, number)
          document.getElementById('query').innerHTML +=
            '<p>donées ajouté de ' +
            current +
            ' à ' +
            number +
            ' sur ' +
            total +
            'entrées</p><br/>'
        } else {
          const current = number
          number = number + 20
          console.log('error', current, number)
          document.getElementById('query').innerHTML +=
            '<p>erreur de donées de ' +
            current +
            ' à ' +
            number +
            ' sur ' +
            total +
            'entrées</p><br/>'
        }
        await new Promise((resolve) => setTimeout(resolve, 500))
      } else {
          
        const sendData = dataToRm.splice(0, dataToRm.length)
        const request = await deleteArrayOfId(sendData)
        if (request.success) {
          alert('done :' + (number + sendData.length) + ' entries')
        }
      }
    } while (dataToRm.length)
}

function deleteArrayOfId(arrayId){
    const result = $.ajax({
        type: 'POST',
        url: 'delete_dual.php',
        cache:false,
        data: { data: arrayId },

        success: function (response) {
          return response
        },
    })
}

function mergeArray(array1 , array2){
    let result = []
    for (var i = 0; i < array1.length; i++){
        let data = {
            submission_id : array1[i].submission_id,
            nom_interesse : array1[i].field_value,
            prenoms_interesse : array2[i].field_value,
        }
        result.push(data)
    }
    return result
}

function reduceArrayToUnique(dataArray){
    let result = []
    
    dataArray.forEach(el => {
        const data = result.filter(
          p =>
            p.nom_interesse == el.nom_interesse &&
            p.prenoms_interesse == el.prenoms_interesse,
        )
        if (data.length == 0) {
          result.push(el)
        }
    })

    return result
}

function createArrayId(dataArray){
    let result = []
    dataArray.forEach(el => {
        result.push(el.submission_id)
    })
    return result
}

async function createCsvDelete(arrayToExport){
    let csvString = [
    [
      "\r\n",
      "Nom",
      "Prenom",
      "\r\n"
    ],
    ...arrayToExport.map(item => [
      item.nom_interesse,
      item.prenoms_interesse,
      "\r\n"
    ])
  ];
  csvString = "data:application/csv," + encodeURIComponent(csvString);
  var x = document.createElement("A");
  x.setAttribute("href", csvString );
  x.setAttribute("download", "delete.csv");
  document.body.appendChild(x);
  x.click();
  
  return true
}
