import type { PzSegmentDefinition, PzSegmentsConfig } from '../types'; export function isLegacyMode(settings: any): boolean { return !settings.usePzSegment; } const DEFAULT_SEPARATOR = '--'; const DEFAULT_SEGMENTS: PzSegmentDefinition[] = [ { name: 'locale' }, { name: 'currency' }, { name: 'url' } ]; export function getPzSegmentsConfig(settings: any): PzSegmentsConfig { if (settings.pzSegments) { const customSegments = (settings.pzSegments.segments ?? []).filter( (seg: PzSegmentDefinition) => !DEFAULT_SEGMENTS.some((d) => d.name === seg.name) ); return { separator: settings.pzSegments.separator ?? DEFAULT_SEPARATOR, segments: [...DEFAULT_SEGMENTS, ...customSegments] }; } return { separator: DEFAULT_SEPARATOR, segments: DEFAULT_SEGMENTS }; } export function encodePzValue( values: Record, config: PzSegmentsConfig ): string { return config.segments .map((seg) => values[seg.name] ?? '') .join(config.separator); } export function decodePzValue( pzValue: string, config: PzSegmentsConfig ): Record { const parts = pzValue.split(config.separator); const result: Record = {}; config.segments.forEach((seg, index) => { result[seg.name] = parts[index] ?? ''; }); return result; } export function getBuiltInSegments( parsed: Record, settings: any ): { locale: string; currency: string; url: string } { const { defaultLocaleValue, defaultCurrencyCode } = settings.localization; return { locale: parsed.locale || defaultLocaleValue, currency: parsed.currency || defaultCurrencyCode, url: parsed.url ? decodeURIComponent(parsed.url) : '' }; } export function parsePzParams( params: { pz?: string; locale?: string; currency?: string; url?: string }, settings: any ): { locale: string; currency: string; url: string; [key: string]: string } { if (isLegacyMode(settings)) { return { locale: params.locale ?? settings.localization.defaultLocaleValue, currency: params.currency ?? settings.localization.defaultCurrencyCode, url: params.url ? decodeURIComponent(params.url) : '' }; } const config = getPzSegmentsConfig(settings); const parsed = decodePzValue(params.pz ?? '', config); const builtIn = getBuiltInSegments(parsed, settings); return { ...parsed, ...builtIn }; }