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

/**
 * function to create annee scolaire
 * @param {*} code
 * @param {*} debut
 * @param {*} fin
 * @returns promise
 */
async function createAnneeScolaire(code, debut, fin) {
  const sql = 'INSERT INTO anneescolaire (code, debut, fin) VALUES (?, ?, ?)'

  try {
    let [result] = await pool.query(sql, [code, debut, fin])

    return {
      success: true,
      id: result.insertId
    }
  } catch (error) {
    return { success: false, error: 'Erreur veullez réeseyer' }
  }
}

/**
 * function to get all Année Univesitaire
 * @returns promise
 */
async function getAnneeScolaire() {
  const sql = 'SELECT * FROM anneescolaire ORDER BY code DESC'

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

    return rows
  } catch (error) {
    return { success: false, error: 'Erreur veullez réeseyer' }
  }
}

async function getInterval() {
  const sql = 'SELECT debut, fin FROM anneescolaire ORDER BY id DESC'

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

    return rows
  } catch (error) {
    return { success: false, error: 'Erreur veullez réeseyer' }
  }
}

async function getSingleAnneScolaire(id) {
  const sql = 'SELECT * FROM anneescolaire WHERE id = ?'

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

    return rows[0]
  } catch (error) {
    return { success: false, error: 'Erreur veullez réeseyer' }
  }
}

async function deleteAnneeScolaire(id) {
  const sql = 'DELETE FROM anneescolaire WHERE id = ?'

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

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

    return {
      success: true,
      message: 'Année universitaire supprimé avec succès.'
    }
  } catch (error) {
    return { success: false, error: 'Erreur veullez réeseyer' }
  }
}

async function updateAnneeScolaire(id, code, debut, fin) {
  const sql = 'UPDATE anneescolaire SET code = ?, debut = ?, fin = ? WHERE id = ?'

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

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

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

async function setCurrent(id) {
  const sql = 'UPDATE anneescolaire SET is_current = 0 WHERE id > 0 AND is_current = 1'
  const sql2 = 'UPDATE anneescolaire SET is_current = 1 WHERE id = ?'

  pool.query(sql)

  try {
    const [result] = pool.query(sql2, [id])
    console.log(result)

    return {
      success: true,
      id: result.insertId
    }
  } catch (error) {
    return { success: false, error: 'Erreur veullez réeseyer' }
  }
}

module.exports = {
  createAnneeScolaire,
  getAnneeScolaire,
  getInterval,
  deleteAnneeScolaire,
  getSingleAnneScolaire,
  updateAnneeScolaire,
  setCurrent
}
