// 区块值序列化与反序列化工具
const FIELD_DELIMITER = '\u001F'; // 字段内分隔符（多值）
const GROUP_DELIMITER = '\u001E'; // 字段间分隔符

/**
 * 序列化区块值为字符串
 * @param blockValues 区块值对象
 * @returns 序列化后的字符串
 */
export const serializeBlockValues = (blockValues: Record<string, any>): string => {
  return Object.entries(blockValues).map(([elementId, values]) => {
    // 转义分隔符防止冲突
    const sanitize = (str: string) => str.replace(/[\u001E\u001F]/g, '');

    // === 修改点1：根据类型处理值 ===
    // 处理多值字段（text类型）
    if (Array.isArray(values)) {
      return `${elementId}${FIELD_DELIMITER}${values.map((v) => sanitize(v)).join(FIELD_DELIMITER)}`;
    }
    // 处理单值字段（block类型）
    return `${elementId}${FIELD_DELIMITER}${sanitize(values)}`;
  })
    .join(GROUP_DELIMITER);
};

/**
 * 反序列化字符串为区块值对象
 * @param serialized 序列化字符串
 * @returns 区块值对象
 */
export const deserializeBlockValues = (serialized: string): Record<string, any> => {
  if (!serialized) return {};

  try {
    // 1. 清理数据
    const sanitized = serialized
      .replace(/(\u001E|\u001F)+$/, '')  // 移除末尾分隔符
      .replace(/^\u001E+/, '');         // 移除开头分隔符

    // 2. 分割组
    return sanitized.split(GROUP_DELIMITER).reduce((acc, group) => {
      // 3. 跳过空组
      if (!group.trim()) return acc;
      // 4. 分割字段
      const parts = group.split(FIELD_DELIMITER);
      if (parts.length < 2) return acc;

      const elementId = parts[0];
        const values = parts.slice(1).filter((v) => v !== null);


      // 5. 保留原始数据类型（不转换单值字段）
      acc[elementId] = values.length > 1 ? values : values[0];
      return acc;
    }, {} as Record<string, any>);

  } catch (error) {
    return {};
  }
};
