import type { FarmingPlayer } from '../player/player.js';
import type { DynamicFortuneSource } from '../upgrades/sources/dynamicfortunesources.js';
import { Crop } from './crops.js';
import { Rarity } from './reforges.js';
import { Stat, type StatsRecord } from './stats.js';
type ShardId = keyof typeof FARMING_ATTRIBUTE_SHARDS;
export type FarmingAttributes = Record<ShardId | string, number>;
export interface FarmingAttributeShardContext {
    attributes?: FarmingAttributes | Record<string, number>;
    infestedPlotProbability?: number;
    crop?: Crop;
}
export type FarmingAttributeShardSourceContext = FarmingPlayer | FarmingAttributeShardContext;
export interface FarmingAttributeShard {
    name: string;
    skyblockId: string;
    rarity: Rarity;
    wiki: string;
    effect: FarmingAttributeShardEffect;
    stats?: StatsRecord<unknown, FarmingAttributeShardSourceContext>;
    perLevelStats?: StatsRecord<unknown, FarmingAttributeShardSourceContext>;
    active?: DynamicFortuneSource<FarmingAttributeShardSourceContext>['active'];
}
export type FarmingAttributeShardEffect = 'none' | 'rates' | 'fortune' | 'wisdom';
export declare const FARMING_ATTRIBUTE_SHARDS: Record<string, FarmingAttributeShard>;
export declare function normalizeAttributeId(id: string): ShardId | undefined;
export declare function getAttributeAmount(attributes: Record<string, number> | undefined, id: ShardId): number;
export declare function normalizeAttributes(attributes?: Record<string, number>): Record<string, number> | undefined;
export declare const ATTRIBUTE_SHARD_LEVELING: Partial<Record<Rarity, number[]>>;
export declare function getShardLevel(rarity: Rarity, amount?: number | null): number;
export declare function getShardsForLevel(rarity: Rarity, level: number): number;
export declare function getShardsForNextLevel(rarity: Rarity, amount: number): number;
export declare function getShardFortune(shard: FarmingAttributeShard, player: FarmingAttributeShardSourceContext, level?: number): number;
export declare function getShardStat(shard: FarmingAttributeShard, player: FarmingAttributeShardSourceContext, stat: Stat, level?: number): number;
export {};
