import { parseFanavaranId } from "src/lookups/fanavaran-last-car-policy"; export const FANAVARAN_HULL_DMG_KIND_CAPTION = "تخریب"; export const FANAVARAN_HULL_DMG_COST_KIND_CAPTION = "مجموع لوازم"; /** Fallback when lookup fetch fails (Parsian `vehicle-hull-dmg-kind`). */ export const FANAVARAN_DEFAULT_HULL_DMG_KIND_ID = 5485; /** Fallback when lookup fetch fails (`vehicle-hull-dmg-cost-kinds` Id). */ export const FANAVARAN_DEFAULT_HULL_DMG_COST_KIND_ID = 1; /** GEN.06 factory (فابریک) accessory row. Used for every hull DmgSection. */ export const FANAVARAN_DEFAULT_HULL_VEHICLE_ACCESSORY_ID = 3043330; export type FanavaranHullDmgAccessoryRow = { Id?: unknown; AccessoryKindId?: unknown; AccessoryDesc?: unknown; }; export function asLookupRows(value: unknown): Record[] { if (!Array.isArray(value)) return []; return value.filter( (row): row is Record => !!row && typeof row === "object" && !Array.isArray(row), ); } export function asHullDmgAccessoryRows(value: unknown): FanavaranHullDmgAccessoryRow[] { return asLookupRows(value) as FanavaranHullDmgAccessoryRow[]; } export function findLookupIdByCaption( rows: unknown, caption: string, ): number | null { const target = caption.trim(); for (const row of asLookupRows(rows)) { if (String(row.Caption ?? "").trim() !== target) continue; const id = parseFanavaranId(row.Id); if (id != null) return id; } return null; } function isFactoryDefaultAccessoryRow(row: FanavaranHullDmgAccessoryRow): boolean { const desc = String(row.AccessoryDesc ?? "").trim(); return ( desc.includes("کليه قطعات فابريک") || desc.includes("کلیه قطعات فابریک") || desc.includes("کليه قطعات") || desc.includes("فابريک") ); } /** * GEN.06 VehicleHullAccessoryId from policy dmg-accessories. * 1) Match AccessoryKindId to car-components part id. * 2) Else factory bundle row (app default outer parts map here on Parsian). */ export function resolveVehicleHullAccessoryId( accessories: FanavaranHullDmgAccessoryRow[], accessoryKindId: number | null, ): number | null { if (accessories.length === 0) return null; if (accessoryKindId != null) { const exact = accessories.find( (row) => parseFanavaranId(row.AccessoryKindId) === accessoryKindId, ); const exactId = parseFanavaranId(exact?.Id); if (exactId != null) return exactId; } const factory = accessories.find(isFactoryDefaultAccessoryRow); const factoryId = parseFanavaranId(factory?.Id); if (factoryId != null) return factoryId; return parseFanavaranId(accessories[0]?.Id); }