interface InterfaceParam {
  field?: string;
  relationField?: unknown;
  sourceType?: number;
  [key: string]: unknown;
}

/** Build parameters for a new interface while retaining mappings for fields shared with the previous interface. */
export function mergeInterfaceParams(nextParams: InterfaceParam[], previousParams: InterfaceParam[] = []): InterfaceParam[] {
  const previousByField = new Map(previousParams.filter((item) => item.field).map((item) => [item.field, item]));

  return nextParams.map((item) => {
    const previous = item.field ? previousByField.get(item.field) : undefined;
    return {
      ...item,
      relationField: previous?.relationField ?? '',
      sourceType: previous?.sourceType ?? 1,
    };
  });
}
