import BigNumber from 'bignumber.js';
import { Address, Hash } from '../commonTypes';
import { ContractWrapperFactory } from '../contractWrapperFactory';
import { ArcTransactionResult, IContractWrapperFactory } from '../iContractWrapperBase';
import { TxGeneratingFunctionOptions } from '../transactionService';
import { EventFetcherFactory } from '../web3EventService';
import { BootstrappingWrapperBase } from './bootstrappingWrapperBase';
import { Erc20Wrapper } from './erc20';
export declare class Auction4ReputationWrapper extends BootstrappingWrapperBase {
    name: string;
    friendlyName: string;
    factory: IContractWrapperFactory<Auction4ReputationWrapper>;
    Bid: EventFetcherFactory<Auction4ReputationBidEventResult>;
    Redeem: EventFetcherFactory<Auction4ReputationRedeemEventResult>;
    initialize(options: Auction4ReputationInitializeOptions): Promise<ArcTransactionResult>;
    redeem(options: Auction4ReputationRedeemOptions & TxGeneratingFunctionOptions): Promise<ArcTransactionResult>;
    /**
     * Returns reason why can't redeem, or else null if can redeem
     * @param lockerAddress
     */
    getRedeemBlocker(options: Auction4ReputationRedeemOptions): Promise<string | null>;
    /**
     * Returns reason why can't bid, else null if can bid
     */
    getBidBlocker(options: Auction4ReputationBidOptions): Promise<string | null>;
    /**
     * Bid on behalf of the current account
     * @param options
     */
    bid(options: Auction4ReputationBidOptions & TxGeneratingFunctionOptions): Promise<ArcTransactionResult>;
    /**
     * transfer bidded tokens to the wallet
     * @param options
     */
    transferToWallet(options: {
        legalContractHash: Hash;
    } & TxGeneratingFunctionOptions): Promise<ArcTransactionResult>;
    /**
     * get promise of the amount the account has bid on the given auction.
     * @param bidderAddress
     * @param auctionId
     */
    getBid(bidderAddress: Address, auctionId: number): Promise<BigNumber>;
    getUserEarnedReputation(options: Auction4GetUserEarnedOptions): Promise<BigNumber>;
    /**
     * get a promise of an array of auction ids and amounts in which the given account has placed a bid,
     * or all auctions if beneficiaryAddressis not supplied
     * @param beneficiaryAddress optional
     */
    getBids(beneficiaryAddress?: Address): Promise<Array<GetBidAuctionIdsResult>>;
    /**
     * Get a promise of the first date/time when anything can be redeemed
     */
    getRedeemEnableTime(): Promise<Date>;
    /**
     * Get a promise of the total reputation rewardable across all the auctions
     */
    getReputationReward(): Promise<BigNumber>;
    getReputationRewardLeft(): Promise<BigNumber>;
    getAuctionsEndTime(): Promise<Date>;
    getAuctionsStartTime(): Promise<Date>;
    getNumberOfAuctions(): Promise<number>;
    /**
     * Get a promise of  the reputation reward of a single auction
     */
    auctionReputationReward(): Promise<BigNumber>;
    /**
     * Return promise of 0-based id of the current auction.  Returns a negative number if the auction
     * has not yet begun.  If auction is over then may return an id for an auction that doesn't exist.
     */
    getCurrentAuctionId(): Promise<number>;
    /**
     * Get a promise of the number of seconds in a single auction
     */
    getAuctionPeriod(): Promise<number>;
    getToken(): Promise<Erc20Wrapper>;
    getWallet(): Promise<Address>;
    getAvatar(): Promise<Address>;
    /**
     * Get a promise of the total amount bid for a given auction.
     */
    getAuctionTotalBid(auctionId: number): Promise<BigNumber>;
    protected hydrated(): void;
    private validateAuctionId;
}
export declare class Auction4ReputationType extends ContractWrapperFactory<Auction4ReputationWrapper> {
    deployed(): Promise<Auction4ReputationWrapper>;
}
export declare const Auction4ReputationFactory: Auction4ReputationType;
export interface Auction4ReputationReleaseEventResult {
    /**
     * indexed
     */
    _lockingId: Hash;
    /**
     * indexed
     */
    _beneficiary: Address;
    /**
     * in Wei
     */
    _amount: BigNumber;
}
export interface Auction4ReputationInitializeOptions {
    avatarAddress: Address;
    /**
     * number of seconds in a single auction period.
     */
    auctionPeriod: number;
    /**
     * start of the first auction
     */
    auctionsStartTime: Date;
    numberOfAuctions: number;
    /**
     * Reputation cannot be redeemed until after this time, even if redeeming has been enabled.
     */
    redeemEnableTime: Date;
    reputationReward: BigNumber | string;
    tokenAddress: Address;
    walletAddress: Address;
}
export interface Auction4ReputationRedeemOptions {
    /**
     * 0-based index of the auction.
     */
    auctionId: number;
    beneficiaryAddress: Address;
    /**
     * block in which contract was created, to optimize search for Redeem events, if needed
     */
    contractBirthBlock?: number;
    legalContractHash: Hash;
}
export interface Auction4GetUserEarnedOptions {
    /**
     * 0-based index of the auction.
     */
    auctionId: number;
    beneficiaryAddress: Address;
    /**
     * block in which contract was created, to optimize search for Redeem events, if needed
     */
    contractBirthBlock?: number;
}
export interface Auction4ReputationBidOptions {
    amount: BigNumber | string;
    legalContractHash: Hash;
}
export interface Auction4ReputationBidEventResult {
    _amount: BigNumber;
    /**
     * 0-based index of the auction.
     * indexed
     */
    _auctionId: BigNumber;
    /**
     * indexed
     */
    _bidder: Address;
}
export interface Auction4ReputationRedeemEventResult {
    _amount: BigNumber;
    /**
     * 0-based index of the auction.
     * indexed
     */
    _auctionId: BigNumber;
    /**
     * indexed
     */
    _beneficiary: Address;
}
export interface GetBidAuctionIdsResult {
    auctionId: number;
    amount: BigNumber;
}
