import axios from "axios";
import log from "../config/log";
import clientConfigDB from "../models/clientConfig.model";
import CONSTANTS from "../config/constants";

const getClientEaseBuzzCredentials = async (
  clientId: number,
  propId: number,
) => {
    let F = "Eazebuzz Credentials";
  try {
    let easebuzzKey = process.env.EASEBUZZ_KEY;
    let easebuzzSalt = process.env.EASEBUZZ_SALT;
    let easebuzzSubMerchant = null;

    if(0 === clientId){
      let data = {
        key: easebuzzKey,
        salt: easebuzzSalt,
        subMerchant : easebuzzSubMerchant,
      }
      return data;
    }

    let easebuzzCredType = "DEFAULT";
    
    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) {
      log.info(
        `[${F}], Client Id [${clientId}], Prop Id [${propId}], Using Property Credentials`
      );
      easebuzzKey = `${propEasebuzzKeyData?.value}`;
      easebuzzSalt = `${propEasebuzzSaltData?.value}`;
      easebuzzSubMerchant = propEasebuzzSubMerchantData ? `${propEasebuzzSubMerchantData?.value}` : null;
    } else if(clientEasebuzzKeyData && clientEasebuzzSaltData) {
      log.info(
        `[${F}], Client Id [${clientId}], Prop Id [${propId}], Using Client Credentials`
      );
      easebuzzKey = clientEasebuzzKeyData?.value;
      easebuzzSalt = `${clientEasebuzzSaltData?.value}`;
      easebuzzSubMerchant = clientEasebuzzSubMerchantData ? `${clientEasebuzzSubMerchantData?.value}` : null;
      if (propEasebuzzSubMerchantData) {
        log.info(
          `[${F}], Client Id [${clientId}], Prop Id [${propId}], Using Property Sub-Merchant`
        );
        easebuzzSubMerchant = propEasebuzzSubMerchantData ? `${propEasebuzzSubMerchantData?.value}` : null;
      }
    } else if (propEasebuzzSubMerchantData) {
      log.info(
        `[${F}], Client Id [${clientId}], Prop Id [${propId}], Using Kipinn Credentials, But Sub Merchant For Property`
      );
      easebuzzKey = process.env.EASEBUZZ_KEY;
      easebuzzSalt = process.env.EASEBUZZ_SALT;
      easebuzzSubMerchant = propEasebuzzSubMerchantData ? `${propEasebuzzSubMerchantData?.value}` : null;
    } else if (clientEasebuzzSubMerchantData) {
      log.info(
        `[${F}], Client Id [${clientId}], Prop Id [${propId}], Using Kipinn Credentials, But Sub Merchant For Client`
      );
      easebuzzKey = process.env.EASEBUZZ_KEY;
      easebuzzSalt = process.env.EASEBUZZ_SALT;
      easebuzzSubMerchant = clientEasebuzzSubMerchantData ? `${clientEasebuzzSubMerchantData?.value}` : null;
    } else {
      log.info(
        `[${F}], Client Id [${clientId}], Prop Id [${propId}], Using Default Kipinn Credentials`
      );
    }
    let data = {
            key: easebuzzKey,
            salt: easebuzzSalt,
            subMerchant : easebuzzSubMerchant,
      }
    return data;
  } catch (error: any) {
    log.info(
      `[GET Eazebuzz Credentails], Client Id [${clientId}], Prop Id [${propId}], Error: ${JSON.stringify(error)}`
    );
    return false;
  }
};

export default getClientEaseBuzzCredentials;
