/**
 * Player name normalization and fuzzy matching.
 * Used by roster-reconciler to match ESPN players to SGO players.
 *
 * 3-tier matching:
 *   Tier 1 (confidence 1.0): Exact normalized match — strip accents, lowercase, remove non-alpha except spaces
 *   Tier 2 (confidence 0.95): Suffix-stripped match — also remove Jr/Sr/II/III/IV/V
 *   Tier 3 (confidence 0.80): Last name + first initial within same team
 */
/**
 * Normalize a player name for comparison.
 * - Decompose unicode (NFD) then strip combining diacritical marks
 * - Lowercase
 * - Remove non-alpha characters except spaces
 * - Collapse whitespace, trim
 *
 * Example: "P.J. Washington Jr." → "pj washington jr"
 */
export declare function normalizeName(name: string): string;
/**
 * Strip common name suffixes (jr, sr, ii, iii, iv, v) from an already-
 * normalized name.  Only removes a suffix that appears as a standalone
 * word at the very end of the string.
 *
 * Example: "jimmy butler iii" → "jimmy butler"
 * Example: "tim hardaway jr"  → "tim hardaway"
 * Safe:    "derrick ivory"    → "derrick ivory" (no change — "v" is not standalone at end)
 */
export declare function stripSuffix(normalized: string): string;
/**
 * Build a "first-initial + rest-of-name" key for tier-3 matching.
 * Takes the first character of the first word, then everything after the
 * first space.
 *
 * Example: "ronald holland"           → "r holland"
 * Example: "shai gilgeous alexander"  → "s gilgeous alexander"
 */
export declare function getInitialLastName(normalized: string): string;
export interface MatchResult {
    sgoPlayerID: string;
    sgoName: string;
    espnName: string;
    tier: 1 | 2 | 3;
    confidence: number;
}
interface PlayerEntry {
    playerID: string;
    name: string;
}
/** Sentinel value indicating that a key maps to more than one player. */
declare const AMBIGUOUS: unique symbol;
type MapValue = PlayerEntry | typeof AMBIGUOUS;
export interface LookupMaps {
    tier1: Map<string, MapValue>;
    tier2: Map<string, MapValue>;
    tier3: Map<string, MapValue>;
}
/**
 * Pre-build Maps for all 3 matching tiers so that lookups are O(1).
 *
 * For tier 2 and tier 3, if two or more players produce the same key the
 * entry is marked ambiguous and will be skipped during matching (to avoid
 * false positives).
 */
export declare function buildLookupMaps(players: Array<PlayerEntry>): LookupMaps;
/**
 * Match an ESPN player name against a list of SGO players using the 3-tier
 * system.  Returns the best match or null.
 *
 * If `prebuilt` lookup maps are provided they will be used for O(1) lookups;
 * otherwise the function falls back to a linear scan of `sgoPlayers`.
 */
export declare function matchPlayer(espnName: string, sgoPlayers: Array<PlayerEntry>, prebuilt?: LookupMaps): MatchResult | null;
export {};
//# sourceMappingURL=player-normalizer.d.ts.map