package page.example;

import org.wikiwebserver.handler.http.FormData;
import org.wikiwebserver.handler.http.HTTPException;
import org.wikiwebserver.handler.http.interfaces.HTTPResponder;
import page.config.SiteTemplatedPage;


import static org.wikiwebserver.html.HTMLHelper.*;

public abstract class EncoderPage extends SiteTemplatedPage implements HTTPResponder {
	
    
    public void generate() throws HTTPException {
        
        setTitle("Web-based " + getTitle() + " - WikiWebServer.org");

        String input = "Text to encode / decode... '\"<>";    

        try {
            FormData formData = getFormData();
            if (formData != null) {
                String action = formData.getFirst("action");

                input = formData.getFirst("input");            
                
                if (action.equals("Encode")) input = encode(input);
                
                if (action.equals("Decode")) input = decode(input);
            }

        }
        catch (Exception ex) {
            String msg = "Failed to perform encoding or decoding";
            throw new HTTPException(500, msg, ex);
        }
        
        // Avoid displaying null
        if (input == null) input = "";

        append(h(1, getTitle()) +
               form(
                   textarea("input", input, "rows='5' style='width: 100%'") +
                   submitbutton("action", "Encode") + submitbutton("action", "Decode")
               )
        );
    } 
    
    protected abstract String getTitle();
    
    protected abstract String encode(String plain) throws Exception;
    
    protected abstract String decode(String encoded) throws Exception;
}
