/**
 * Parse a Warhammer wargear-option line (army-assist `Datasheets_options.json`
 * `description` prose) into a structured option, or report why it could not.
 *
 * The prose is regular enough to parse with a small staged pipeline:
 *   1. skip non-options (null / "None" / footnotes / "cannot be replaced");
 *   2. peel the leading *constraint* clause ("For every 5 models,", "The
 *      Champion's", "Any number of Boyz", "Up to 2 models", "1 model");
 *   3. split the core on the swap/add verb (passive "… can be replaced with …",
 *      active "… can replace its … with …", or add-on "… equipped with / can
 *      have …") into the replaced weapon(s) and the replacement clause;
 *   4. parse the replacement clause into a flat group or a "one of the
 *      following" choice.
 *
 * Output carries weapon/wargear **display names**, not ids — the converter
 * resolves those against each unit's own wargear (see convert-faction.ts).
 * Anything that does not fit returns `{ ok: false, reason }` so the caller can
 * surface it in the unparsed report rather than guess. Mechanic-only; no
 * copyrighted rules text is reproduced.
 */
export interface ParsedConstraint {
    model_name?: string;
    per_n_models?: number;
    max_count?: number;
    any_number?: boolean;
}
export interface ParsedOption {
    kind: "swap" | "addon";
    constraint: ParsedConstraint;
    /** Display names of weapons removed; empty for a pure add-on. */
    replaces: string[];
    /** Display names added (all of them). Set iff not a choice. */
    replacement?: string[];
    /** Choice of groups ("one of the following"); pick one group. Set iff a choice. */
    replacement_choice?: string[][];
}
export type ParseResult = {
    ok: true;
    option: ParsedOption;
}
/** A real option we failed to parse — goes to the unparsed report. */
 | {
    ok: false;
    reason: string;
}
/** Not an option at all (footnote / empty / note) — silently ignored. */
 | {
    ok: "skip";
};
/**
 * Parse one option `description`. Returns `{ ok: "skip" }` for non-options,
 * `{ ok: false, reason }` for a real option we couldn't parse, and
 * `{ ok: true, option }` otherwise.
 */
export declare function parseOption(description: string | null | undefined): ParseResult;
//# sourceMappingURL=option-parser.d.ts.map