package com.equalize.xpi.util.converter;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

import javax.xml.bind.DatatypeConverter;

public class ConversionBase64Decode {
	private final String base64String;
	private final boolean zippedContent;

	public ConversionBase64Decode(String base64String) {
		this(base64String, false);
	}

	public ConversionBase64Decode(String base64String, boolean zippedContent) {
		this.base64String = base64String;
		this.zippedContent = zippedContent;
	}

	public byte[] decode() throws IOException {
		byte[] decoded = DatatypeConverter.parseBase64Binary(this.base64String);

		if(!this.zippedContent) {
			return decoded;
		} else {
			// Unzip the contents, assumption is only 1 zip entry in the zip content
			ZipInputStream zis = new ZipInputStream(new ByteArrayInputStream(decoded));
			ByteArrayOutputStream baos = null;
			ZipEntry ze = zis.getNextEntry();
			// Check if there is a zip entry
			if (ze == null) {
				throw new NullPointerException("Unable to decompress as content is not zipped");
			}				
			baos = Converter.toBAOS(zis);
			zis.closeEntry();
			zis.close();
			return baos.toByteArray();
		}
	}
}