import { Address } from "@solana/kit";
import { FarmAndKey } from "../models";
import { FarmState } from "../@codegen/farms/accounts";
export interface IFarmResponse {
    config: FarmConfig;
    state: FarmState;
}
export interface ILogger {
    log: (...args: any[]) => void;
    debug: (...args: any[]) => void;
    warn: (...args: any[]) => void;
    error: (...args: any[]) => void;
}
export declare const noOpLogger: ILogger;
export interface ReserveInfo {
    address: Address;
    symbol: string;
    farmCollateral: Address;
    farmDebt: Address;
}
export interface MarketWithReserves {
    address: Address;
    marketName: string;
    reserves: ReserveInfo[];
}
export interface StrategyInfo {
    address: Address;
    farm: Address;
}
export interface VaultInfo {
    address: Address;
    vaultFarm: Address;
}
export declare function getAllFarmConfigsAndStates({ allFarms, logger, markets, strategies, vaults, }: {
    allFarms: FarmAndKey[];
    logger: ILogger;
    markets: MarketWithReserves[];
    strategies: StrategyInfo[];
    vaults: VaultInfo[];
}): {
    collateralFarms: IFarmResponse[];
    debtFarms: IFarmResponse[];
    strategyFarms: IFarmResponse[];
    earnVaultFarms: IFarmResponse[];
    standaloneFarms: IFarmResponse[];
};
export type FarmConfig = {
    farmMetadata: FarmMetadata;
    farmPubkey: Address;
    stakingTokenMint: Address;
    withdrawAuthority: Address;
    globalConfig: Address;
    strategyId: Address;
    vaultId: Address;
    depositCapAmount: number;
    rewards: Array<{
        rewardTokenMint: Address;
        rewardType: string;
        rewardPerSecondDecimals: number;
        minClaimDurationSeconds: number;
        rewardCurve: Array<{
            startTs: number;
            rps: number;
        } | undefined>;
        rewardAvailable: number;
        rewardToTopUp: number;
        rewardToTopUpDurationDays: number;
    } | undefined>;
    farmAdmin: Address;
    delegateAuthority: Address;
    pendingFarmAdmin: Address;
    scopePrices: Address;
    scopePriceOracleId: string;
    isRewardUserOnceEnabled: number;
    scopeOracleMaxAge: number;
    lockingMode: number;
    lockingStart: number;
    lockingDuration: number;
    lockingEarlyWithdrawalPenaltyBps: number;
    depositWarmupPeriod: number;
    withdrawCooldownPeriod: number;
    slashedAmountSpillAddress: Address;
    delegatedRpsAdmin: Address;
    secondDelegatedAuthority: Address;
};
export type FarmMetadata = {
    type: string;
    reserve: Address | undefined;
    reserveSymbol: string | undefined;
    market: Address | undefined;
    marketName: string | undefined;
    strategy: Address | undefined;
    vault: Address | undefined;
};
export declare function getFarmConfigType(farmKey: Address, farmState: FarmState, farmMetadata: FarmMetadata): FarmConfig;
//# sourceMappingURL=farms.d.ts.map