const { LZMA } = require('lzma-native');
function decompressValveLZMA(buffer) {
  if (buffer.length < 13) {
    throw new Error("Buffer too short to be Valve LZMA");
  }
  const magic = buffer.readUInt32BE(0); // Big-Endian
  if (magic !== 0x4C5A4D41) { // 'LZMA'
    throw new Error("Not a Valve LZMA container (magic mismatch)");
  }
  const uncompressedLength = buffer.readUInt32LE(4);
  const compressedLength   = buffer.readUInt32LE(8);
  const expectedTotal = 12 + 5 + compressedLength; // header (12) + props(5) + data
  if (buffer.length < expectedTotal) {
    throw new Error(`Buffer too short: expected ${expectedTotal}, have ${buffer.length}`);
  }
  const props = buffer.slice(12, 12 + 5);
  const lzmaData = buffer.slice(12 + 5, 12 + 5 + compressedLength);
  return new Promise((resolve, reject) => {
    const lzma = new LZMA();
    const lzmaHeader = Buffer.alloc(5 + 8);
    props.copy(lzmaHeader, 0); // копируем 5 байт props
    lzmaHeader.writeUInt32LE(uncompressedLength, 5);
    const fullLzmaStream = Buffer.concat([lzmaHeader, lzmaData]);
    lzma.decompress(fullLzmaStream, (result, error) => {
      if (error) {
        reject(error);
      } else {
        resolve(Buffer.from(result));
      }
    });
  });
}