const errors = {
  TENANT_NOT_FOUND: -1,
  TENANT_REGISTRATION_DISABLED: -2,
  TENANT_MISSING_NAME: -3,
  TENANT_MAX_USERS_REACHED: -4,
  TENANT_MAX_ADMINS_REACHED: -5,
  TENANT_ALREADY_EXISTS: -6,
  TENANT_MISSING_DESCRIPTION: -7,
  TENANT_CANT_SET_COMPLETION_PROVIDER: -8,
  TENANT_INVALID_TYPE: -9,

  USER_NOT_CONFIRMED: -11,
  USER_NOT_FOUND: -12,
  USER_OR_PASSWORD_INVALID: -13,
  USER_MUST_CHANGE_PASSWORD: -14,
  USER_MUST_ENTER_VERIFICATION_CODE: -15,

  USER_MISSING_TENANT: -21,
  USER_MISSING_NAME: -22,
  USER_MISSING_PASSWORD: -23,
  USER_MISSING_EMAIL: -24,
  USER_MISSING_VERIFICATION_CODE: -25,
  USER_NAME_ALREADY_USED: -26,
  USER_PASSWORD_NOT_CONFORMING_TO_POLICY: -27,
  USER_EMAIL_ALREADY_USED: -28,
  USER_EMAIL_INVALID: -29,
  USER_VERIFICATION_CODE_INVALID: -30,
  USER_MISSING_NAME_OR_EMAIL: -31,
  USER_NAME_INVALID: -32,
  USER_HAS_ONE_OR_MORE_MEMORI: -33,
  USER_MISSING_NEW_PASSWORD: -34,
  USER_CANT_CREATE_MEMORI: -35,
  USER_MAX_MEMORI_REACHED: -36,
  USER_TOO_MANY_ATTEMPTS: -38,
  USER_MUST_ACCEPT_TNC_AND_PP: -39,
  USER_BIRTH_DATE_CANT_BE_CHANGED: -40,
  USER_CANT_SET_COMPLETION_PROVIDER: -41,
  USER_CANT_ENABLE_DEEP_THOUGHT: -42,
  USER_CANT_ENABLE_DCM_INTEGRATION: -43,
  USER_CANT_ENABLE_CHAINING_OR_BOARD_OF_EXPERTS: -44,
  USER_CREATION_BILLING_DENIED_PERMISSION: -46,
  USER_HAS_ONE_OR_MORE_COMPLETION_CONFIGS: -47,
  USER_CANT_BE_DELETED: -48,
  USER_ORDER_BY_INVALID: -49,

  MEMORI_NOT_FOUND: -51,
  MEMORI_NOT_ACCESSIBLE: -52,
  MEMORI_ONLY_OWNER_CAN_CHANGE_GIVER_TAG_AND_PIN: -53,

  SESSION_NOT_FOUND: -101,
  SESSION_IS_NOT_ADMINISTRATIVE: -102,
  SESSION_EXPIRED: -103,

  MEMORI_MISSING_CONFIGURATION: -201,
  MEMORI_CONFIGURATION_NOT_FOUND: -202,
  MEMORI_INVALID_PRIVACY_TYPE: -203,
  MEMORI_MISSING_PASSWORD: -204,
  MEMORI_INVALID_TOTAL_NUMBER_OF_RECOVERY_TOKENS: -205,
  MEMORI_INVALID_MINIMUM_NUMBER_OF_RECOVERY_TOKENS: -206,
  MEMORI_INVALID_VOICE_TYPE: -207,
  MEMORI_MISSING_NAME: -208,
  MEMORI_MISSING_PASSWORD_OR_RECOVERY_TOKENS: -209,
  MEMORI_INVALID_ID: -210,
  MEMORI_NAME_ALREADY_USED: -211,
  MEMORI_INVALID_PIN: -212,
  MEMORI_GIVER_TAG_PIN_CHANGE_REQUIRES_SEPARATE_OPERATION: -213,
  MEMORI_NO_PASSWORD_WHEN_PUBLIC: -214,
  MEMORI_DEEP_THOUGHT_REQUIRES_COMPLETIONS: -215,
  MEMORI_BOARD_OF_EXPERTS_REQUIRES_COMPLETIONS: -216,
  MEMORI_INVALID_COMPLETION_CONFIG: -217,
  MEMORI_MACRO_FUNCTIONS_REQUIRES_COMPLETIONS: -218,
  MEMORI_BLOCKING_DATE_MISSING_OR_WRONG: -219,
  MEMORI_LIST_FILTER_NOT_SPECIFIED: -220,

  MEMORI_TRANSFER_MISSING_DESTINATION_USER: -231,
  MEMORI_TRANSFER_INVALID_DESTINATION_USER_ID: -232,
  MEMORI_TRANSFER_DESTINATION_USER_DATA_INCONSISTENT: -233,
  MEMORI_TRANSFER_NOTHING_TO_DO: -234,

  MEMORI_CONFIGURATION_CANT_BE_CHANGED: -251,
  MEMORI_MISSING_NEW_PASSWORD: -252,

  MEMORI_SESSIONS_INVALID_DATE_FROM_FORMAT: -261,
  MEMORI_SESSIONS_INVALID_DATE_TO_FORMAT: -262,
  MEMORI_SESSION_NOT_FOUND: -263,
  MEMORI_SESSION_DOESNT_ACCEPT_MEDIA: -264,

  MEMORI_FEATURE_REQUIRES_SUBSCRIPTION: -271,

  INTEGRATION_NOT_FOUND: -301,

  INTEGRATION_INVALID_TYPE: -401,
  INTEGRATION_ALREADY_EXISTS: -402,
  INTEGRATION_MEMORI_IS_NOT_PUBLIC: -403,
  INTEGRATION_MISSING_INVOCATION_TEXT: -404,
  INTEGRATION_MISSING_DEVICE_EMAILS: -405,
  INTEGRATION_MEMORI_IS_EMPTY: -406,
  INTEGRATION_MISSING_PRIVACY_POLICY: -407,
  INTEGRATION_MISSING_CATEGORY: -408,
  INTEGRATION_MISSING_DESCRIPTION: -409,
  INTEGRATION_INVALID_INVOCATION_TEXT: -410,
  INTEGRATION_GOOGLE_NO_MORE_AVAILABLE: -411,

  UPLOAD_REQUIRES_MULTIPART_ENCODING: -501,
  UPLOAD_MISSING_CONTENT_TYPE_BOUNDARY: -502,
  UPLOAD_MAX_LENGTH_EXCEEDED: -503,
  UPLOAD_FILE_IS_EMPTY: -504,
  UPLOAD_INVALID_FILE_TYPE_OR_SIGNATURE: -505,
  UPLOAD_MISSING_FILE_NAME: -506,
  UPLOAD_INVALID_MEMORY_ID: -507,
  UPLOAD_MISSING_FILE_CONTENT: -508,

  ASSET_NOT_FOUND: -601,
  ASSET_NOT_ACCESSIBLE: -602,
  ASSET_MISSING_SESSION_ID: -603,
  ASSET_INVALID_FILE_NAME: -604,
  ASSET_MALWARE_SCAN_THREATS_FOUND: -605,

  INVITATION_NOT_FOUND: -701,
  INVITATION_NOT_ACCESSIBLE: -702,
  INVITATION_ALREADY_ACCEPTED: -703,
  INVITATION_ALREADY_REJECTED: -704,
  INVITATION_MISSING_DESTINATION_EMAIL: -705,
  INVITATION_DESTINATION_EMAIL_INVALID: -706,
  INVITATION_MISSING_TAG: -707,
  INVITATION_MISSING_PIN: -708,
  INVITATION_INVALID_PIN: -709,
  INVITATION_INVALID_TYPE: -710,
  INVITATION_MISSING_DESTINATION_NAME: -711,
  INVITATION_TAG_PIN_CANT_BE_CHANGED: -712,
  INVITATION_CANT_BE_CHANGED: -713,

  ACTIONLOG_INVALID_USER_ID: -801,
  ACTIONLOG_INVALID_DATE_FROM_FORMAT: -802,
  ACTIONLOG_INVALID_DATE_TO_FORMAT: -803,
  ACTIONLOG_INVALID_MEMORI_ID: -804,

  CONSUMPTIONLOG_INVALID_TYPE: -901,
  CONSUMPTIONLOG_INVALID_DATE_FROM_FORMAT: -902,
  CONSUMPTIONLOG_INVALID_DATE_TO_FORMAT: -903,
  CONSUMPTIONLOG_INVALID_USER_ID: -904,
  CONSUMPTIONLOG_INVALID_MEMORI_ID: -905,

  NOTIFICATIONPREFS_INVALID_CHATLOG_EXTRACTION_PERIOD: -1001,
  BROADCAST_NOT_ALLOWED: -1002,
  INVALID_NOTIFICATION_TYPE: -1003,
  NOTIFICATION_NOT_FOUND: -1004,
  INVALID_NOTIFICATION_FILTER: -1005,
  INVALID_NOTIFICATION_PERIOD: -1006,

  PROCESS_INVALID_TYPE: -1401,
  PROCESS_ALREADY_RUNNING: -1401,
  PROCESS_NOT_FOUND: -1402,

  IMPORTCSV_MISSING_CSV: -1502,
  IMPORTCSV_MISSING_SEPARATOR: -1503,
  IMPORTCSV_INVALID_SEPARATOR: -1504,
  IMPORTCSV_MISSING_HEADERS: -1505,
  IMPORTCSV_MISSING_TITLE_VARIANT_SEPARATOR: -1506,
  IMPORTCSV_INVALID_RECEIVER_ID: -1507,
  IMPORTCSV_INVALID_MEDIA_LINK: -1508,
  IMPORTCSV_INVALID_LINK_TITLE_HANDLING: -1509,
  IMPORTCSV_UNDETECTABLE_CHAR_ENCODING: -1521,

  IMPORTTXT_INVALID_GRANULARITY: -1602,
  IMPORTTXT_INVALID_RECEIVER_ID: -1603,
  IMPORTTXT_INVALID_MEDIA_LINK: -1604,
  IMPORTTXT_INVALID_LINK_TITLE_HANDLING: -1605,
  IMPORTTXT_UNDETECTABLE_CHAR_ENCODING: -1621,
  IMPORTTXT_IMPORT_LIMIT_EXCEEDED: -1632,
  IMPORTTXT_IMPORT_ON_GPT4_REQUIRES_API_KEY: -1633,
  IMPORTTXT_IMPORT_REQUIRES_PAYING: -1634,
  IMPORTTXT_BILLING_DENIED_PERMISSION: -1635,

  IMPORT_MISSING_ROWS: -1701,
  IMPORT_CANT_IMPORT_TO_SECRET_MEMORI: -1702,

  IMPORTMEMORI_INVALID_MEMORI_SPECS: -1711,
  IMPORT_MISSING_JSONL: -1712,
  IMPORTMEMORI_INVALID_SPECS: -1713,

  EXPORT_MISSING_PASSWORD: 1711,

  EXPORTCSV_MISSING_CSV_SPECS: -1801,
  EXPORTCSV_MISSING_SEPARATOR: -1802,
  EXPORTCSV_INVALID_SEPARATOR: -1803,
  EXPORTCSV_MISSING_TITLE_VARIANT_SEPARATOR: -1804,
  EXPORTCSV_MISSING_NEW_LINE_CHAR: -1805,
  EXPORTCSV_INVALID_NEW_LINE_CHAR: -1806,

  EXPORTJSONL_MISSING_JSONL_SPECS: -1821,
  EXPORTJSONL_MISSING_PLATFORM: -1822,
  EXPORTJSONL_INVALID_PLATFORM: -1823,
  EXPORTJSONL_EXPORT_REQUIRES_PAYING: -1832,

  ANALYSIS_MISSING_QUERY: -1901,
  ANALYSIS_CANT_ANALYZE_SECRET_MEMORI: -1902,
  ANALYSIS_USER_QUERY_MATCH_REQUIRES_DEEP_THOUGHT: -1903,

  BADGE_ASSIGNMENT_WRONG_OR_MISSING_CREDENTIALS: -2001,
  BADGE_ASSIGNMENT_MISSING_REF_ID: -2002,
  BADGE_ASSIGNMENT_OUTCOME_NOT_FOUND: -2003,
  BADGE_ASSIGNMENT_MISSING_ASSERTION_URL: -2004,
  BADGE_ASSIGNMENT_MISSING_BADGE_URL: -2005,
  BADGE_ASSIGNMENT_MISSING_ISSUER_URL: -2006,
  BADGE_ASSIGNMENT_INVALID_URL: -2007,

  BADGE_ASSIGNMENT_MISSING_RECIPIENT: -2021,
  BADGE_ASSIGNMENT_UNKNOWN_RECIPIENT_TYPE: -2022,
  BADGE_ASSIGNMENT_MISSING_RECIPIENT_IDENTITY: -2023,
  BADGE_ASSIGNMENT_MISSING_RECIPIENT_HASH_TYPE: -2024,
  BADGE_ASSIGNMENT_UNKNOWN_RECIPIENT_HASH_TYPE: -2025,
  BADGE_ASSIGNMENT_WRONG_RECIPIENT_IDENTITY: -2026,

  BADGE_NOT_FOUND: -2051,

  OUTCOME_NO_DCM_CONFIGURED: -2071,
  OUTCOME_USER_BADGES_DISABLED: -2072,

  COMPLETION_CONFIG_MISSING_NAME: -2401,
  COMPLETION_CONFIG_MISSING_PROVIDER: -2402,
  COMPLETION_CONFIG_MISSING_ENDPOINT: -2403,
  COMPLETION_CONFIG_MISSING_API_KEY: -2404,
  COMPLETION_CONFIG_MISSING_MODEL: -2405,
  COMPLETION_CONFIG_NO_PURPOSE_SPECIFIED: -2406,
  COMPLETION_CONFIG_INVALID_NAME: -2407,
  COMPLETION_CONFIG_INVALID_PURPOSE: -2411,
  COMPLETION_CONFIG_INVALID_ENDPOINT: -2412,
  COMPLETION_CONFIG_INCONSISTENT_ENDPOINT: -2413,
  COMPLETION_CONFIG_INVALID_PROVIDER: -2414,
  COMPLETION_CONFIG_NOT_FOUND: -2421,
  COMPLETION_CONFIG_NOT_ACCESSIBLE: -2422,
  COMPLETION_CONFIG_NAME_RESERVED: -2441,
  COMPLETION_CONFIG_NAME_ALREADY_EXISTS: -2442,
  COMPLETION_CONFIG_VISIBILITY_CHANGE_NOT_ALLOWED: -2443,
  COMPLETION_CONFIG_MISSING_MANDATORY_PREFIX: -2444,
  COMPLETION_CONFIG_VISIBILITY_NOT_PERMITTED: -2445,
  COMPLETION_CONFIG_USE_AS_DEFAULT_NOT_PERMITTED: -2446,
  COMPLETION_CONFIG_USE_AS_DEFAULT_REQUIRES_TENANT_VISIBILITY: -2447,
  COMPLETION_CONFIG_CHARGEABLE_NOT_PERMITTED: -2448,
  COMPLETION_CONFIG_INVALID_APPLY_TO: -2449,
  COMPLETION_CONFIG_APPLY_TO_TENANT_NOT_ALLOWED: -2450,

  TRUSTED_APPLICATION_NOT_FOUND: -2501,
  TRUSTED_APPLICATION_NOT_ACCESSIBLE: -2502,
  TRUSTED_APPLICATION_NAME_REQUIRED: -2503,
  TRUSTED_APPLICATION_TOKEN_REQUIRED: -2504,
  TRUSTED_APPLICATION_NAME_ALREADY_EXISTS: -2505,
  TRUSTED_APPLICATION_INVALID_TOKEN: -2506,
};

export const BACKEND_ERRORS = new Map<number, string>(
  Object.entries(errors).map(([key, value]) => [value, key])
);

export const getErrori18nKey = (errorCode: number) => {
  if (!errorCode) return 'error.generic';

  if (errorCode === 401 || errorCode === 403) {
    return 'error.unauthorized';
  } else if (errorCode === 404) {
    return 'error.notFound';
  } else if (errorCode === 422) {
    return 'error.unprocessableEntity';
  } else if (errorCode === 500) {
    return 'internal server error';
  }

  let error = BACKEND_ERRORS.get(errorCode);
  if (!error) {
    return 'error.generic';
  } else {
    return `errors.${error}`;
  }
};
