import moment from "moment";
import log from "../config/log";
import clientDB from "../models/client.model";
import propertyDB from "../models/property.model";
import CONSTANTS from "../config/constants";
import clientConfigDB from "../models/clientConfig.model";

export const canToggleOnlinePayment = async ({
  clientId,
  propId,
}: {
  clientId: number;
  propId: number;
}) => {
  const U = "CanToggleOnlinePayment";
  const F = "canToggleOnlinePayment";

  try {
    log.info(`[${U}], [${F}], Client Id [${clientId}], Prop Id [${propId}]`);

    const client = await clientDB.getById({ id: clientId });
    if (!client) {
      log.error(
        `[${U}], [${F}], Client Id [${clientId}], Prop Id [${propId}], Client Not Found`,
      );
      return false;
    }

    const property = await propertyDB.getById({ id: propId });
    if (!property) {
      log.error(
        `[${U}], [${F}], Client Id [${clientId}], Prop Id [${propId}], Property Not Found`,
      );
      return false;
    }

    if (Number(client.paymentGateway) === CONSTANTS.PAYMENT_GATEWAY.PAYU) {
      if (property.payuMid && property.payuKey) {
        return true;
      } else if (client.payuMid && client.payuKey) {
        return true;
      } else {
        return false;
      }
    } else if (Number(client.paymentGateway) === CONSTANTS.PAYMENT_GATEWAY.EASEBUZZ) {
        let propEasebuzzKeyData = await clientConfigDB.getClientConfigByPropId({
        clientId,
        propId,
        provider: CONSTANTS.CLIENT_CONFIG_PROVIDER.EASEBUZZ,
        type: CONSTANTS.CLIENT_CONFIG_TYPE.KEY
        });
        let propEasebuzzSaltData = await clientConfigDB.getClientConfigByPropId({
        clientId,
        propId,
        provider: CONSTANTS.CLIENT_CONFIG_PROVIDER.EASEBUZZ,
        type: CONSTANTS.CLIENT_CONFIG_TYPE.SALT
        });
        let propEasebuzzSubMerchantData = await clientConfigDB.getClientConfigByPropId({
        clientId,
        propId,
        provider: CONSTANTS.CLIENT_CONFIG_PROVIDER.EASEBUZZ,
        type: CONSTANTS.CLIENT_CONFIG_TYPE.SUB_ACCOUNT_MID
        });

        let clientEasebuzzKeyData = await clientConfigDB.getClientConfig({
        clientId,
        provider: CONSTANTS.CLIENT_CONFIG_PROVIDER.EASEBUZZ,
        type: CONSTANTS.CLIENT_CONFIG_TYPE.KEY
        });
        let clientEasebuzzSaltData = await clientConfigDB.getClientConfig({
        clientId,
        provider: CONSTANTS.CLIENT_CONFIG_PROVIDER.EASEBUZZ,
        type: CONSTANTS.CLIENT_CONFIG_TYPE.SALT
        });
        let clientEasebuzzSubMerchantData = await clientConfigDB.getClientConfig({
        clientId,
        provider: CONSTANTS.CLIENT_CONFIG_PROVIDER.EASEBUZZ,
        type: CONSTANTS.CLIENT_CONFIG_TYPE.SUB_ACCOUNT_MID
        });

        if (propEasebuzzKeyData && propEasebuzzSaltData && propEasebuzzSubMerchantData) {
            return true;
        } else if (clientEasebuzzKeyData && clientEasebuzzSaltData && clientEasebuzzSubMerchantData) {
            return true;
        } else if (propEasebuzzSubMerchantData || clientEasebuzzSubMerchantData) {
            return true;
        } else {
            return false;
        }
    } else {
      return false;
    }    return true;
  } catch (error) {
    log.error(`[${U}], [${F}], Error [${error}]`);
    return false;
  }
};
