const getCallerInfo = () => {
  const stackLine = new Error().stack?.split('\n')[3].trim();
  // Regex pour extraire le fichier, la ligne et la colonne
  const match = stackLine.match(/\(?([^)]+):(\d+):(\d+)\)?$/);

  let callerInfo = '(unknown)';
  if (match) {
    const [, filePath, line, column] = match;
    const fileName = filePath.split('/').pop(); // Garde juste le nom du fichier
    callerInfo = `[${fileName}:${line}]`;
  }
  return callerInfo;
};

const logger = {
  debug: (...args) => {
    if (process.env.NODE_ENV !== 'production') {
      // eslint-disable-next-line no-console
      console.log.apply(console, ['[DEBUG]', `${getCallerInfo()}`, ...args]);
    }
  },
  error: (...args) => {
    // Les erreurs sont toujours loguées
    // eslint-disable-next-line no-console
    console.error.apply(console, ['[ERROR]', `${getCallerInfo()}`, ...args]);
  },
  warn: (...args) => {
    if (process.env.NODE_ENV !== 'production') {
      // eslint-disable-next-line no-console
      console.warn.apply(console, ['[WARN]', `${getCallerInfo()}`, ...args]);
    }
  },
  info: (...args) => {
    if (process.env.NODE_ENV !== 'production') {
      // eslint-disable-next-line no-console
      console.info.apply(console, ['[INFO]', `${getCallerInfo()}`, ...args]);
    }
  },
};

export default logger;
