package httpserver;

import java.io.File;
import java.io.FileReader;
import java.io.PrintWriter;
import java.io.BufferedReader;

public class FileHandler extends BaseHandler
    implements HttpRequestHandler
{
    public FileHandler() { }

    public void handleRequest(
        HttpRequest request,
	HttpResponse response ) throws Exception
    {
        String method = request.getMethod();
        if ( !method.equals("GET") && !method.equals("POST") ) {
            String msg = "only handle GET and POST";
            log( msg );
	    response.sendError(HttpResponse.RESP_METHOD_NOT_ALLOWED, msg);
            return;
        }

        File cwd = new File(".");
        String path = request.getPath();
        // remove leading '/'
        String filename = path.substring(1);
        String suffix = "-plain";
        if ( filename.endsWith( suffix ) ) {
            int len = filename.length() - suffix.length();
            filename = filename.substring(0, len);
            response.setContentType("text/plain");
        }

        log( request.getMethod() + " " + path );
        File f = new File( cwd, filename );
        if ( ! f.exists() ) {
            log( f + " not found" );
	    String msg = path + " not found";
	    response.sendError(HttpResponse.RESP_FILE_NOT_FOUND, msg);
            return;
        }
	PrintWriter pw = response.getWriter();
        BufferedReader rd =
            new BufferedReader( new FileReader( f ));
        String line;
        while( (line=rd.readLine()) != null ) {
            pw.println( line );
        }
        pw.flush();
	rd.close(); // clean up resources
    }
}
