const { pool } = require('../database')

/**
 * function to insert niveau to database
 */
async function insertNiveau(nom) {
  // Initialize an array to hold the individual names
  let nom_multiple = []

  // Check if 'nom' contains a comma and split it into multiple names
  if (nom.includes(',')) {
    nom_multiple = nom.split(',' || ', ').map((name) => name.trim()) // Trim to remove extra spaces
  } else {
    nom_multiple = [nom] // Treat it as a single name
  }

  // Prepare the query for insertion
  const sql = `INSERT INTO niveaus (nom) VALUES (?)`

  try {
    let responses = []

    for (const name of nom_multiple) {
      // Insert each name and collect the response
      const [result] = await pool.query(sql, [name])
      responses.push(result)
    }
    if (nom_multiple.length === responses.length) {
      return JSON.stringify({
        last_row: nom_multiple.length,
        changes: 1
      })
    } else return false
  } catch (error) {
    return { success: false, error: 'Erreur veullez réeseyer' }
  }
}

/**
 * function to get single niveau for updating
 * @param {*} id
 * @returns Promise
 */
async function getSingleNiveau(id) {
  const sql = 'SELECT * FROM niveaus WHERE id = ?'

  try {
    let [rows] = await pool.query(sql, [id])

    if (rows.length > 0) {
      return rows[0]
    } else {
      return null
    }
  } catch (error) {
    return { success: false, error: 'Erreur veullez réeseyer' }
  }
}

/**
 * function used to update the niveau
 * @param {*} nom
 * @param {*} id
 * @returns Promise
 */
async function updateNiveau(nom, id) {
  const sql = 'UPDATE niveaus SET nom = ? WHERE id = ?'

  try {
    let [result] = await pool.query(sql, [nom, id])

    if (result.affectedRows === 0) {
      return {
        success: false,
        message: 'Niveau non trouvé ou aucune modification effectuée.'
      }
    }

    return {
      success: true,
      message: 'Utilisateur mis à jour avec succès.'
    }
  } catch (error) {
    return { success: false, error: 'Erreur veullez réeseyer' + error }
  }
}

/**
 * function to get all niveau
 */
async function getNiveau() {
  const sql = 'SELECT niveaus.*,niveaus.id AS niveau_id FROM niveaus'

  try {
    let [rows] = await pool.query(sql)
    console.log("maka niveau: ", rows);
    return rows
  } catch (error) {
    return { success: false, error: 'Erreur veullez réeseyer' }
  }
}


async function deleteNiveau(id) {
  const sql = 'DELETE FROM niveaus WHERE id = ?'

  try {
    let [result] = await pool.query(sql, [id])

    if (result.affectedRows === 0) {
      return {
        success: false,
        message: 'Niveau non trouvé.'
      }
    }

    return {
      success: true,
      message: 'Niveau supprimé avec succès.'
    }
  } catch (error) {
    return {
      success: false,
      error: 'Erreur lors de la suppression, veuillez réessayer.'
    }
  }
}

module.exports = {
  getNiveau,
  insertNiveau,
  getSingleNiveau,
  updateNiveau,
  deleteNiveau,
}
