import { Contract, Signer } from 'ethers';
import { RevenueSharedConfiguratorAbi } from './abi/RevenueSharedConfigurator';

import { NetworkConfig, SupportedChainIds } from './networkConfig';
import { IRevenueSharedConfigurator } from './types';

export class RevenueSharedConfigurator implements IRevenueSharedConfigurator {
  readonly signer: Signer;
  protected contract: Contract;

  constructor(_signer: Signer, chainId: SupportedChainIds) {
    this.signer = _signer;
    var _address = undefined;
    if (
      NetworkConfig[chainId] === undefined ||
      NetworkConfig[chainId].revenueSharedConfiguratorContractAddresses ===
        undefined ||
      NetworkConfig[chainId].revenueSharedConfiguratorContractAddresses
        .length <= 0
    ) {
      throw new Error('Requested for unsupported chain');
    } else {
      _address =
        NetworkConfig[chainId].revenueSharedConfiguratorContractAddresses[0];
      this.contract = new Contract(
        _address,
        RevenueSharedConfiguratorAbi,
        this.signer
      );
    }
  }

  async getPaymentOption(paymentOption: Number): Promise<number> {
    return await this.contract.getPaymentOption(Number(paymentOption));
  }

  async isNFTAllowedForRevenueSharedRenting(address: string): Promise<boolean> {
    return await this.contract.isNFTAllowedForRevenueSharedRenting(
      address.toLowerCase()
    );
  }
}
