type ZstdModule = typeof import('@mongodb-js/zstd');

let zstdModulePromise: Promise<ZstdModule | null> | undefined;

async function loadZstdModule(): Promise<ZstdModule | null> {
  if (!zstdModulePromise) {
    zstdModulePromise = import('@mongodb-js/zstd').catch(() => null);
  }
  return zstdModulePromise;
}

/** 检测 buf 是否以 zstd 魔数 `28 b5 2f fd` 开头。 */
export function hasZstdMagic(buf: Buffer): boolean {
  return buf.length >= 4
    && buf[0] === 0x28 && buf[1] === 0xb5 && buf[2] === 0x2f && buf[3] === 0xfd;
}

/**
 * 若 buf 以 zstd 魔数起始,解压后按 UTF-8 解码;否则直接当 UTF-8。
 * null / empty 返回空串,解压失败返回兜底标识字符串。
 */
export async function tryDecompressToString(buf: Buffer | null | undefined): Promise<string> {
  if (!buf || buf.length === 0) return '';
  if (hasZstdMagic(buf)) {
    try {
      const zstd = await loadZstdModule();
      if (!zstd) return `<zstd-decode-unavailable ${buf.length}B>`;
      const output = await zstd.decompress(buf);
      return output.toString('utf8');
    } catch {
      return `<zstd-decode-failed ${buf.length}B>`;
    }
  }
  return buf.toString('utf8');
}
