using System.IO;
using SharpCompress.Compressors;
using SharpCompress.Compressors.BZip2;

namespace CodeImp.DoomBuilder.GZBuilder.Data
{
	internal static class SharpCompressHelper
	{
		internal static MemoryStream CompressStream(Stream stream) 
		{
			byte[] arr = new byte[stream.Length];
			stream.Read(arr, 0, (int)stream.Length);

			MemoryStream ms = new MemoryStream();
			BZip2Stream bzip = new BZip2Stream(ms, CompressionMode.Compress, true, false);

			bzip.Write(arr, 0, arr.Length);
			bzip.Close();

			return ms;
		}

		internal static MemoryStream DecompressStream(Stream stream) 
		{
			stream.Seek(0, SeekOrigin.Begin);
			BZip2Stream bzip = new BZip2Stream(stream, CompressionMode.Decompress, false, false);

			byte[] buffer = new byte[16 * 1024];
			MemoryStream ms = new MemoryStream();

			int read;
			while((read = bzip.Read(buffer, 0, buffer.Length)) > 0)
				ms.Write(buffer, 0, read);

			return ms;
		}
	}
}
