const mysql = require("mysql2");
const utilsMath = require("./utils/utilsMath.js");

const dbConfig = {
  host: process.env.DB_HOST,
  user: process.env.DB_USER,
  password: process.env.DB_PASSWORD,
  database: process.env.DB_DATABASE,
};

const con = mysql.createConnection(dbConfig);

con.connect((err) => {
  if (err) {
    console.error("Erreur de connexion à la base de données:", err);
    process.exit(1);
  }
  console.log("Connected to Mysql");
});

//Get player position in Database
async function getCharacterPos() {
  try {
    const [result, fields] = await con.promise().query(`
      SELECT woss.literalValue, wosp.landblockId, wosp.posX, wosp.posY
      FROM characters c
      INNER JOIN world_obj_stat_poss wosp ON c.objectId = wosp.objectId
      INNER JOIN world_obj_stat_strinfo woss ON c.objectId = woss.objectId
    `);

    // Tableau pour stocker les données converties
    let characterPositions = [];

    // Manipuler les données résultantes
    for (let row of result) {
      // Convertir les coordonnées de jeu en coordonnées Leaflet
      let leafletLoc = utilsMath.convertInGameLoctoLeafletLoc(
        row.landblockId,
        row.posX,
        row.posY
      );

      // Ajouter les données converties au tableau
      characterPositions.push({
        literalValue: row.literalValue,
        locx: leafletLoc.locx,
        locy: leafletLoc.locy,
      });
    }

    return characterPositions;
  } catch (err) {
    console.error(
      "Erreur lors de la récupération des positions des personnages:",
      err
    );
    return [];
  }
}

//Get npc position in Database
async function getNpcPos() {
  try {
    const [result, fields] = await con.promise().query(`
      SELECT entityDid, landblockId, posX, posY, objectName 
      FROM ac2re_map.map_npc;
    `);

    // Tableau pour stocker les données converties
    let npcPosition = [];

    // Manipuler les données résultantes
    for (let row of result) {
      // Convertir les coordonnées de jeu en coordonnées Leaflet
      let leafletLoc = utilsMath.convertInGameLoctoLeafletLoc(
        row.landblockId,
        row.posX,
        row.posY
      );

      // Ajouter les données converties au tableau
      npcPosition.push({
        entityid: row.entityDid,
        literalValue: row.objectName,
        locx: leafletLoc.locx,
        locy: leafletLoc.locy,
      });
    }

    return npcPosition;
  } catch (err) {
    console.error(
      "Erreur lors de la récupération des positions des NPC:",
      err
    );
    return [];
  }
}


module.exports = { getCharacterPos, getNpcPos };
