import { BlockingErrorGroup, GroupingError } from "../types/grp-errors.types"
import { groupingErrorDict } from "./grouping-errors.dict"

export const mapGroupingError = (returnCode: string): GroupingError | null => {
  const returnCodeNumber = parseInt(returnCode)

  if (returnCodeNumber === 0) return null

  if (isNaN(returnCodeNumber) && returnCode) return {
    code: 0,
    errorName: 'Erreur de groupage inconnue',
    scope: null,
    blockingErrorGroup: BlockingErrorGroup.IMPLEMENTATION_ERROR,
    description: `Ce code d'erreur n'a pas pu être transformé en un code numérique : ${returnCode}`,
  }

  const groupingErrorInfo = groupingErrorDict[returnCodeNumber]

  if (!groupingErrorInfo && returnCode) return {
    code: returnCodeNumber,
    errorName: 'Erreur de groupage inconnue',
    scope: null,
    blockingErrorGroup: BlockingErrorGroup.IMPLEMENTATION_ERROR,
    description: 'Ce code d\'erreur n\'est pas connu dans le dictionnaire des erreurs de groupage',
  }

  return {
    code: returnCodeNumber,
    ...groupingErrorInfo,
  }
}
