export enum PaymeCode {
  METHOD_NOT_FOUND = -32601,
  INVALID_AMOUNT = -31001,
  TRANSACTION_NOT_FOUND = -31003,
  NO_REFUND = -31007,
  COULD_NOT_PERFORM_TRANSACTION = -31008,
  ORDER_NOT_FOUND = -31050,
  ORDER_IN_PROGRESS = -31051,
  ORDER_ACCEPTED = -31052,
  ORDER_CANCELLED = -31053,
  TRANSACTION_ALREADY_CREATED = -31054,
  SYSTEM_ERROR = -32400,
  INVALID_ACCESS_DATA = -32504,
  INVALID_AUTHORIZATION = -32504,
}

export interface IPaymeError {
  name: string;
  code: number;
  message: {
    ru: string;
    en: string;
    uz: string;
  };
  data?: any;
}

type PaymeErrorsList = { [errorName: string]: IPaymeError };

export const PaymeError: PaymeErrorsList = {
  METHOD_NOT_FOUND: {
    name: 'Method not found',
    code: PaymeCode.METHOD_NOT_FOUND,
    message: {
      ru: 'Метод не найден',
      en: 'Method not found',
      uz: 'Metod topilmadi',
    },
  },
  ORDER_NOT_FOUND: {
    name: 'Order not Found',
    code: PaymeCode.ORDER_NOT_FOUND,
    message: {
      ru: 'Заказ не найден',
      en: 'Order not found',
      uz: 'Buyurtma topilmadi',
    },
  },
  ORDER_IN_PROGRESS: {
    name: 'Order is already being processed',
    code: PaymeCode.ORDER_IN_PROGRESS,
    message: {
      ru: 'Заказ уже обрабатывается',
      en: 'The order is already being processed',
      uz: "Buyurtma allaqachon ko'rib chiqilmoqda",
    },
  },
  ORDER_ACCEPTED: {
    name: 'Order is already being processed (accepted)',
    code: PaymeCode.ORDER_ACCEPTED,
    message: {
      ru: 'Заказ уже оплачен',
      en: 'The order has already been paid',
      uz: "Buyurtma allaqachon to'langan",
    },
  },
  ORDER_CANCELLED: {
    name: 'Order is already being processed (cancelled)',
    code: PaymeCode.ORDER_ACCEPTED,
    message: {
      ru: 'Заказ уже отменён',
      en: 'The order has already been canceled ',
      uz: 'Buyurtma allaqachon bekor qilingan',
    },
  },
  INVALID_AMOUNT: {
    name: 'The transaction amount does not match the order amount',
    code: PaymeCode.INVALID_AMOUNT,
    message: {
      ru: 'Сумма транзакции не совпадает с суммой заказа',
      en: 'The transaction amount does not match the order amount',
      uz: "Bitim summasi buyurtma summasiga to'g'ri kelmaydi",
    },
  },
  INACTIVE_TRANSCACTION: {
    name: 'Transaction is not active',
    code: PaymeCode.COULD_NOT_PERFORM_TRANSACTION,
    message: {
      ru: 'Транзакция не активна или уже была обработана',
      en: 'Transaction is not active',
      uz: 'Bitim faol emas yoki allaqachon qayta ishlangan',
    },
  },
  COULD_NOT_PERFORM_TRANSACTION: {
    name: 'Could not to perform transaction',
    code: PaymeCode.COULD_NOT_PERFORM_TRANSACTION,
    message: {
      ru: 'Транзакцию не возможно выполнить',
      en: 'Could not to perform transaction',
      uz: 'Tranzaktsiyani amalga oshirish mumkin emas',
    },
  },
  TRANSACTION_NOT_FOUND: {
    name: 'Transaction not found',
    code: PaymeCode.TRANSACTION_NOT_FOUND,
    message: {
      ru: 'Транзакция не найдена',
      en: 'Transaction not found',
      uz: 'Bitim topilmadi',
    },
  },
  TRANSACTION_ALREADY_CREATED: {
    name: 'Transaction already created',
    code: PaymeCode.TRANSACTION_ALREADY_CREATED,
    message: {
      ru: 'Транзакция уже создана или была обработана',
      en: 'Transaction already created',
      uz: 'Tranzaksiya allaqachon yaratilgan yoki qayta ishlangan',
    },
  },
  NO_REFUND: {
    name: 'No refund after complete',
    code: PaymeCode.NO_REFUND,
    message: {
      ru: 'Заказ выполнен. Невозможно отменить транзакцию. Товар или услуга предоставлена покупателю в полном объеме.',
      en: 'The order is completed. It is not possible to cancel the transaction. The product or service is provided to the buyer in full.',
      uz: "Buyurtma bajarildi. Tranzaktsiyani bekor qilish mumkin emas. Tovar yoki xizmat xaridorga to'liq hajmda taqdim etiladi.",
    },
  },
  INVALID_ACCESS_DATA: {
    name: 'Failure access',
    code: PaymeCode.INVALID_ACCESS_DATA,
    message: {
      ru: 'Failure access',
      en: 'Failure access',
      uz: 'Failure access',
    },
  },
  INVALID_AUTHORIZATION: {
    name: 'Invalid Authorization',
    code: PaymeCode.INVALID_AUTHORIZATION,
    message: {
      uz: 'Avtorizatsiya yaroqsiz',
      ru: 'Авторизация недействительна',
      en: 'Authorization invalid',
    },
  },
  SYSTEM_ERROR: {
    name: 'A system error has occurred.',
    code: PaymeCode.SYSTEM_ERROR,
    message: {
      ru: 'Произошла системная ошибка. Пожалуйста обратитесь к поставщику услуг.',
      en: 'A system error has occurred. Please contact your service provider.',
      uz: "Tizim xatosi yuz berdi. Iltimos, xizmat ko'rsatuvchi provayder bilan bog'laning.",
    },
  },
};
