package page.example;

import java.io.IOException;

import org.wikiwebserver.handler.http.FormData;
import org.wikiwebserver.handler.http.HTTPHandler;
import org.wikiwebserver.handler.http.HTTPHeaders;
import org.wikiwebserver.handler.http.HTTPOutputStream;
import org.wikiwebserver.handler.http.interfaces.HTTPResponder;
import org.wikiwebserver.html.HTMLHelper;

import page.config.SiteTemplatedPage;


public class GZippingTest implements HTTPResponder {

    public Object respond(HTTPHandler conn) throws IOException {
        
        FormData formData = conn.getRequest().getFormData();
        if (formData != null) {
            String amountString = formData.getFirst("amount");
            if (amountString != null) {
                HTTPHeaders headers = conn.getResponse().getHeaders();                
                headers.set("Cache-Control", "no-cache");             
                headers.set("Content-Type", "text/octet-stream");
                headers.set("Content-disposition", "inline; filename=\"Package.bin\""); 
                
                writeData(conn.getOutputStream(), Integer.parseInt(amountString));
                return null;
            }
        }
        
        int numKBytes = 10240;
        
        SiteTemplatedPage page = new SiteTemplatedPage();
        page.init(conn);
        page.setTitle("GZip Testing - WikiWebServer.org");
        page.append("<h1>GZip Testing</h1>");
        page.append(HTMLHelper.a(page.getUrl() + "?amount=" + numKBytes, 
                           "Download " + numKBytes + " Kilobytes GZipped"));
        
        return page;
    }
    
    public void writeData(HTTPOutputStream out, int numKBytes) throws IOException {
        byte[] kByte = new byte[1024];
        for (int i=0; i<numKBytes; i++) {
            out.write(kByte);
        }
    }
}

