import { type Crop } from '../constants/crops.js';
import { type Rarity, type Reforge, ReforgeTarget, type ReforgeTier } from '../constants/reforges.js';
import { Stat } from '../constants/stats.js';
import { type FortuneSourceProgress, type FortuneUpgrade, type StatQueryOptions } from '../constants/upgrades.js';
import type { Effect, EffectEnvironment } from '../effects/types.js';
import { type FarmingToolInfo } from '../items/tools.js';
import type { PlayerOptions } from '../player/playeroptions.js';
import type { EliteItemDto } from './item.js';
import type { UpgradeableInfo } from './upgradeable.js';
import { UpgradeableBase } from './upgradeablebase.js';
export interface ToolCurrentLevelProgress {
    /** Current displayed tool level (1-based). */
    level: number;
    /** Next level number (1-based). Present when we know the requirement. */
    next?: number;
    /** Raw XP value from the API for this level. */
    total: number;
    /** XP progress within this level (clamped to the current level goal). */
    progress: number;
    /** XP required to reach the next level from the current level. */
    goal?: number;
    /** Progress ratio within this level (0..1). */
    ratio: number;
    /**
     * True when the tool is effectively capped (shows 100% but does not advance).
     * This is inferred when XP meets/exceeds the current goal, or when the tool is already level 50.
     */
    maxed: boolean;
}
export declare class FarmingTool extends UpgradeableBase {
    item: EliteItemDto;
    crops: Crop[];
    info: FarmingToolInfo;
    get type(): ReforgeTarget;
    get tool(): FarmingToolInfo;
    itemname: string;
    private colorPrefix;
    get name(): string;
    get bountiful(): boolean;
    rarity: Rarity;
    counter: number | undefined;
    cultivating: number;
    reforge: Reforge | undefined;
    reforgeStats: ReforgeTier | undefined;
    logCounter: number;
    collAnalysis: number;
    farmingForDummies: number;
    recombobulated: boolean;
    fortune: number;
    fortuneBreakdown: Record<string, number>;
    level: number;
    xp: number;
    overclocks: number;
    /**
     * Tool XP (`levelable_exp`) is XP within the current level and resets on level-up.
     * When a tool is capped it can show >= 100% progress but not advance.
     */
    getCurrentLevelProgress(): ToolCurrentLevelProgress;
    options?: PlayerOptions;
    constructor(item: EliteItemDto, options?: PlayerOptions);
    getProgress(stats?: Stat[], zeroed?: boolean): FortuneSourceProgress[];
    getUpgrades(options?: StatQueryOptions): FortuneUpgrade[];
    setOptions(options: PlayerOptions): void;
    rebuildTool(item: EliteItemDto, options?: PlayerOptions): void;
    private setReforge;
    changeReforgeTo(reforgeId: string): void;
    changeFarmedCropsTo(crops: number): void;
    getStat(stat: Stat, selectedCrop?: Crop): number;
    /**
     * Returns the declarative `Effect[]` representation of every contribution
     * this tool makes. Tool-level fortune (per-crop), Farming for Dummies,
     * baseline Farming Wisdom, gems, reforge, enchants. The tool-level fortune
     * uses the tool's own `crops` list to emit one `add-stat` per crop fortune
     * type. The resolver applies these unconditionally; the calculator picks
     * the appropriate per-crop fortune based on the active crop.
     */
    getEffects(env: EffectEnvironment): Effect[];
    getFortune(): number;
    private getCounter;
    private getCultivating;
    private getToolLevel;
    private getXp;
    private getOverclocks;
    getCultivatingLevel(): number;
    get farmed(): number;
    isUsed(): boolean;
    supportsCultivating(): boolean;
    isMissingDedication(): boolean | 0 | null | undefined;
    static isValid(item: EliteItemDto | FarmingTool): boolean;
    static fromArray(items: EliteItemDto[], options?: PlayerOptions): FarmingTool[];
    static fakeItem(info: UpgradeableInfo, options?: PlayerOptions): FarmingTool | undefined;
}
