import { type Address, type DecodedAbiFunctionInputs, type DecodedAbiFunctionOutputs, type DelayedMessageExecution, type FullContractState, type ProviderRpcClient, type SendInternalParams } from 'everscale-inpage-provider';
import { type GaugeAbi } from '../../models/gauge/abi';
export interface GaugeRewardRound {
    accRewardPerShare: string;
    endTime: number;
    rewardPerSecond: string;
    startTime: number;
}
export interface GaugeDetails {
    initialized: boolean;
    lastExtraRewardRoundIdx: number[];
    lastQubeRewardRoundIdx: number;
    lastRewardTime: number;
    lastAverageUpdateTime: number;
    lockBoostedSupply: string;
    maxBoost: number;
    maxLockTime: number;
    owner: Address;
    totalBoostedSupply: string;
    voteEscrow: Address;
}
export interface GaugeRewardDetails {
    extraRewardEnded: boolean[];
    extraRewardRounds: GaugeRewardRound[][];
    extraVestingPeriods: number[];
    extraVestingRatios: number[];
    qubeRewardRounds: GaugeRewardRound[];
    qubeVestingPeriod: number;
    qubeVestingRatio: number;
    withdrawAllLockPeriod: number;
}
export interface GaugeTokenDetails {
    depositTokenData: DecodedAbiFunctionOutputs<typeof GaugeAbi, 'getTokenDetails'>['_depositTokenData'];
    extraTokenData: DecodedAbiFunctionOutputs<typeof GaugeAbi, 'getTokenDetails'>['_extraTokenData'];
    qubeTokenData: DecodedAbiFunctionOutputs<typeof GaugeAbi, 'getTokenDetails'>['_qubeTokenData'];
}
export interface GaugeSyncData {
    depositSupply: string;
    depositSupplyAverage: string;
    depositSupplyAveragePeriod: number;
    extraRewardRounds: GaugeRewardRound[][];
    qubeRewardRounds: GaugeRewardRound[];
    poolLastRewardTime: number;
}
export interface GaugeRewardData {
    extraRewardRounds: GaugeRewardRound[][];
    extraSyncIdx: number[];
    lastRewardTime: number;
    qubeRewardRounds: GaugeRewardRound[];
    qubeSyncIdx: number;
}
export interface GaugeSupplyAverage {
    lastAverageUpdateTime: number;
    lockBoostedSupplyAverage: string;
    lockBoostedSupplyAveragePeriod: number;
    supplyAverage: string;
    supplyAveragePeriod: number;
}
export interface BoostedAmountParams {
    amount: string;
    lockTime: string | number;
}
export interface SetExtraFarmEndTimeParams {
    farmEndTimes: (string | number)[];
    ids: string[];
    meta: {
        callId: string | number;
        nonce: string | number;
        sendGasTo: Address | string;
    };
}
export interface DecodedRewardDepositPayload {
    callId: string;
    correct: boolean;
    nonce: string;
}
export interface DecodedDepositPayload {
    callId: string;
    claim: boolean;
    correct: boolean;
    depositOwner: Address;
    lockTime: number;
    nonce: string;
}
export declare abstract class GaugeUtils {
    static setExtraFarmEndTime(connection: ProviderRpcClient, address: Address | string, params: SetExtraFarmEndTimeParams, args?: SendInternalParams): Promise<DelayedMessageExecution>;
    static calcSyncData(connection: ProviderRpcClient, gaugeAddress: Address | string, cachedState?: FullContractState): Promise<GaugeSyncData>;
    static calculateBoostedAmount(connection: ProviderRpcClient, gaugeAddress: Address | string, params: BoostedAmountParams, cachedState?: FullContractState): Promise<string>;
    static calculateRewardData(connection: ProviderRpcClient, gaugeAddress: Address | string, cachedState?: FullContractState): Promise<GaugeRewardData>;
    static calculateSupplyAverage(connection: ProviderRpcClient, gaugeAddress: Address | string, cachedState?: FullContractState): Promise<GaugeSupplyAverage>;
    static getDetails(connection: ProviderRpcClient, gaugeAddress: Address | string, cachedState?: FullContractState): Promise<GaugeDetails>;
    static getRewardDetails(connection: ProviderRpcClient, gaugeAddress: Address | string, cachedState?: FullContractState): Promise<GaugeRewardDetails>;
    static getTokenDetails(connection: ProviderRpcClient, gaugeAddress: Address | string, cachedState?: FullContractState): Promise<GaugeTokenDetails>;
    static getGaugeAccountAddress(connection: ProviderRpcClient, gaugeAddress: Address | string, userAddress: Address | string, cachedState?: FullContractState): Promise<Address>;
    static getVoteEscrowAccountAddress(connection: ProviderRpcClient, gaugeAddress: Address | string, userAddress: Address | string, cachedState?: FullContractState): Promise<Address>;
    static encodeDepositPayload(connection: ProviderRpcClient, gaugeAddress: Address | string, params: any, cachedState?: FullContractState): Promise<string>;
    static encodeRewardDepositPayload(connection: ProviderRpcClient, gaugeAddress: Address | string, params: any, cachedState?: FullContractState): Promise<string>;
    static decodeRewardDepositPayload(connection: ProviderRpcClient, gaugeAddress: Address | string, params: DecodedAbiFunctionInputs<typeof GaugeAbi, 'decodeRewardDepositPayload'>, cachedState?: FullContractState): Promise<DecodedRewardDepositPayload>;
    static decodeDepositPayload(connection: ProviderRpcClient, gaugeAddress: Address | string, params: DecodedAbiFunctionInputs<typeof GaugeAbi, 'decodeDepositPayload'>, cachedState?: FullContractState): Promise<DecodedDepositPayload>;
}
