const db = require("../../../db/db");

const RedsysPos = require('redsys-pos');
const {
  CURRENCIES, TRANSACTION_TYPES
} = RedsysPos;

class RedsysProviders {
  async New(orderFk, price) {
    try {
      const MERCHANT_KEY = process.env.REDSYS_MERCHANT_KEY;
      const redsys = new RedsysPos(MERCHANT_KEY);

      let orderValue = String(orderFk)
      while (true) {
        if (orderValue.length == 4) {
          break
        }
        orderValue = '0' + orderValue
      }
      const regexAmount = /[,.]/
      const amountValue = regexAmount.test(String(price)) ? String(price).replace(/[,.]/g, '') : String(price + '00')

      const obj = {
        amount: amountValue,
        orderReference: orderValue,
        merchantName: process.env.REDSYS_MERCHANT_NAME,
        merchantCode: process.env.REDSYS_MERCHANT_CODE,
        currency: "978",
        transactionType: "0", // '0'
        terminal: process.env.REDSYS_MERCHANT_TERMINAL,
        merchantURL: `${process.env.BASE_URL}/payments/redsys/notification`,
        successURL: `${process.env.BASE_URL}/checkout/success?orderId=${orderFk}&type=redsys`,
        errorURL: `${process.env.BASE_URL}/checkout/error`
      };

      const result = redsys.makePaymentParameters(obj);
      return { ...result, DS_MERCHANT_ORDER: obj.orderReference }
    } catch (error) {
      throw error;
    }
  }

  async success(orderId) {
    try {
      return await db.order_confirm(orderId)
    } catch (error) {
      throw error
    }
  }
}

module.exports = new RedsysProviders();