package servlets;

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.imageio.stream.ImageOutputStream;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

public class ImageServlet extends HttpServlet {
	public static final String PIC_DIR = "best";
	
	private ServletConfig config;
	
	public void init(ServletConfig config) {
		this.config = config;
		System.out.println("Initializing Image Servlet");
	}
	
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws IOException, ServletException {
		System.out.println("doGet");
		doPost(request, response);
	}
	
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws IOException, ServletException {
		System.out.println("doPost");
		
		boolean isImage = request.getParameter("isImage") != null;
		
		if (isImage) {
			File picDir = new File(config.getServletContext().getRealPath(PIC_DIR));
			System.out.println("Dir file found: " + picDir.getAbsolutePath());
			File[] files = picDir.listFiles();
			Random fileSelector = new Random();
			File selected = files[Math.abs(fileSelector.nextInt() % files.length)];
			BufferedImage image = ImageIO.read(selected);
			
			//BufferedImage image = createImage(640, 480);
	    	// Output the image in the form of a JPEG.
			OutputStream out = response.getOutputStream();
			JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
			JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(image);
			param.setQuality(1.0f, false);
			encoder.setJPEGEncodeParam(param);
			encoder.encode(image);
		} else {
			request.getRequestDispatcher("page2.html").include(request, response);
		}
	}
	
	public BufferedImage createImage(int width, int height) {
		BufferedImage image = new BufferedImage(width, height, 
				BufferedImage.TYPE_INT_RGB);
		Graphics2D g = (Graphics2D)image.createGraphics();

		int radius = height / 2;
		Random random = new Random();
		for (int i = 0; i < 360; i++) {
			Color color = new Color(Math.abs(random.nextInt() % 16000000));
			g.setColor(color);
			g.drawLine(width / 2, height / 2, 
					(int)(radius * Math.cos(Math.toRadians(i)) + width / 2),
					(int)(radius * Math.sin(Math.toRadians(i)) + height / 2));
		}
		
		return image;
	}
}

