export type TackleVisualKind = "spinner" | "wobbler" | "soft" | "boilie" | "worm" | "rig" | "unknown"; const KIND_TERMS: Array<[TackleVisualKind, RegExp]> = [ ["spinner", /spinner|spiker|spoon|блесн|вращал|колеб|вертуш|spinner|blinker/i], ["wobbler", /wobbler|воблер|minnow|crank|popper|jerk|walker|plug/i], ["soft", /shad|twister|твистер|силикон|soft|vibro|виброхвост/i], ["boilie", /бойл|boilie|pellet|пеллет|pop[- ]?up/i], ["worm", /черв|worm|мотыл|опарыш|личин|maggot|bloodworm/i], ["rig", /оснаст|монтаж|rig|hook|крюч|leader|повод/i], ]; export function tackleVisualKind(name?: string | null): TackleVisualKind { if (!name?.trim()) return "unknown"; return KIND_TERMS.find(([, pattern]) => pattern.test(name))?.[0] ?? "unknown"; } export function tackleVisualTone(name?: string | null): number { return [...(name?.trim().toLocaleLowerCase("ru") || "unknown")] .reduce((sum, char) => (sum + (char.codePointAt(0) ?? 0)) % 5, 0); }