import { BigNumber as BN, providers, Wallet, Contract, utils, BigNumberish } from 'ethers';
import { GasConfiguration } from '../types';
export declare class Coverage {
    chainID: number;
    walletOrProviderOrSigner: Wallet | providers.JsonRpcSigner | providers.Provider;
    solaceCoverProduct: Contract;
    constructor(chainID: number, walletOrProviderOrSigner?: Wallet | providers.JsonRpcSigner | providers.Provider);
    /*************************************************************
    METHODS - SOLACECOVERPRODUCT EXTERNAL MUTATOR FUNCTION WRAPPERS
    *************************************************************/
    /**
     * Activates policy for `policyholder`
     * @param policyholder The address of the intended policyholder.
     * @param coverLimit The maximum value to cover in **USD**.
     * @param amount The deposit amount in **USD** to fund the policyholder's account.
     * @param referralCode The referral code.
     * @param chains_ The chain ids.
     * @return policyID The ID of the newly minted policy.
     */
    activatePolicy(policyholder: string, coverLimit: BigNumberish, amount: BigNumberish, referralCode: utils.BytesLike, chains?: BigNumberish[], gasConfig?: GasConfiguration): Promise<providers.TransactionResponse>;
    /**
     * @notice Updates the cover limit of a user's policy.
     * @notice This will reset the cooldown.
     * @param newCoverLimit_ The new maximum value to cover in **USD**.
     * @param referralCode_ The referral code.
     */
    updateCoverLimit(newCoverLimit: BigNumberish, referralCode: utils.BytesLike, gasConfig?: GasConfiguration): Promise<providers.TransactionResponse>;
    /**
     * @notice Deposits funds into the `policyholder` account.
     * @param policyholder The policyholder.
     * @param amount The amount to deposit in **USD**.
     */
    deposit(policyholder: string, amount: BigNumberish, gasConfig?: GasConfiguration): Promise<providers.TransactionResponse>;
    /**
     * Withdraw funds from user's account.
     * If cooldown has passed, the user will withdraw their entire account balance.
     * If cooldown has not started, or has not passed, the user will not be able to withdraw their entire account. A minimum required account balance (one epoch's fee) will be left in the user's account.
     */
    withdraw(gasConfig?: GasConfiguration): Promise<providers.TransactionResponse>;
    /**
     * Deactivate a user's policy.
     * This will set a user's cover limit to 0, and begin the cooldown timer. Read comments for [`cooldownPeriod()`](#cooldownperiod) for more information on the cooldown mechanic.
     */
    deactivatePolicy(gasConfig?: GasConfiguration): Promise<providers.TransactionResponse>;
    /*************************************************************
    METHODS - SOLACECOVERPRODUCT EXTERNAL VIEW FUNCTION WRAPPERS
    *************************************************************/
    /**
     * @returns The active cover limit in **USD** to 18 decimal places. In other words, the total cover that has been sold at the current time.
     */
    activeCoverLimit(): Promise<BN>;
    /**
     * @returns The amount of available remaining capacity for new cover.
     */
    availableCoverCapacity(): Promise<BN>;
    /**
     * @returns The maximum amount of cover that can be sold in **USD** to 18 decimals places.
     */
    maxCover(): Promise<BN>;
    /**
     * @returns The policy count (amount of policies that have been purchased, includes inactive policies).
     */
    policyCount(): Promise<BN>;
    /**
     * @param policyholder The policyholder address.
     * @returns The policyholder's account balance in **USD**.
     */
    accountBalanceOf(policyholder: string): Promise<BN>;
    /**
     * @param policyID The policy ID.
     * @returns The cover limit for the given policy ID.
     */
    coverLimitOf(policyID: BigNumberish): Promise<BN>;
    /**
     * @param coverLimit Cover limit.
     * @returns The minimum required account balance for a given cover limit. Equals the maximum chargeable fee for one epoch.
     */
    minRequiredAccountBalance(coverLimit: BN): Promise<BN>;
    /**
     * @param policyID The policy ID.
     * @returns True if policy is active. False if policy is inactive, or does not exist.
     */
    policyStatus(policyID: BigNumberish): Promise<boolean>;
    /**
     * @param policyID The policy ID.
     * @returns The policy chain information
     */
    getPolicyChainInfo(policyID: BigNumberish): Promise<boolean>;
    /**
 * @param policyID The policy ID.
 * @returns The chain at the given index
 */
    getChain(chainIndex: BigNumberish): Promise<boolean>;
    /**
* @param policyID The policy ID.
* @returns The number of supported chains
*/
    numSupportedChains(): Promise<boolean>;
    /**
     * TO-DO Decide if need to decode return value from BN hex.
     * @param policyholder The policyholder address.
     * @returns policyID The policy ID.
     */
    policyOf(policyholder: string): Promise<BN>;
    /**
     * @param policyholder The policyholder address.
     * @returns The reward points for the policyholder.
     */
    rewardPointsOf(policyholder: string): Promise<BN>;
    /**
     * @param policyholder The policyholder address.
     * @returns The total premium paid for the policyholder.
     */
    premiumsPaidOf(policyholder: string): Promise<BN>;
    /**
     * @param policyholder The policyholder address.
     * @returns The cooldown period start expressed as Unix timestamp
     */
    cooldownStart(policyholder: string): Promise<BN>;
    /**
     * @param policyholder The policyholder address.
     * @returns True if the policyholder has previously used a valid referral code, false if not.
     */
    isReferralCodeUsed(policyholder: string): Promise<boolean>;
    /**
     * @param referralCode The referral code.
     * @returns The referrer address, returns 0 address if invalid referral code.
     */
    getReferrerFromReferralCode(referralCode: utils.BytesLike): Promise<string>;
    /**
     * @param referralCode The referral code.
     * @returns True if valid referral code, false otherwise.
     */
    isReferralCodeValid(referralCode: utils.BytesLike): Promise<boolean>;
    /**
     * Generates a referral code for the given Signer (dependent on private key).
     * @returns 65-byte (or 130 hex-character) referral code.
     * Note that this is an Ethereum ECDSA signature.
     *
     * Note Ledger generated signatures appear to have an issue where the last 2 characters (or 1 byte) of the signature is '00' or '01'.
     * Valid Ethereum ECDSA signatures have the last 2 characters as '0b' or '0c'. This is the v part of the signature.
     * To fix this issue, if the last two characters of the signature are '00', replace with '0b'.
     * If the last two characters of the signature are '01', replace with '0c'.
     */
    getReferralCode(): Promise<string>;
}
