/*
 * Created on Sep 30, 2003
 */
package CookieCutter.g1;

import CookieCutter.*;
import java.util.*;

/**
 * @author vlad
 */
public class TrianglePlacer implements CookiePlacer {	
	public void placeCookies(Cookie[] iCookies) {
		 
//		iCookies[0] = iCookies[0].shift(0.1, 0.1);
//		
//		CookieGroup joined = joinCookies(iCookies[0], iCookies[1]);
//		
//		joined = (CookieGroup) joined.transform(new Vertex(0.5, 0.5), Math.PI/2);
//		
//		List sub = joined.getSubCookies();
//		
//		iCookies[0] = (Cookie) sub.get(0);
//		iCookies[1] = (Cookie) sub.get(1);

		
		List consolidated = new ArrayList();
		
		for (int i = 0; i < iCookies.length; i+=2) {
			if (i == iCookies.length - 1) {
				consolidated.add(iCookies[i]);
			} else {
				// join two cookies together
				consolidated.add(joinCookies(iCookies[i], iCookies[i+1]));
			}
		}
		
		Cookie[] temp = (Cookie[])consolidated.toArray(Cookie.kZeroCookies);
		//new ValueCorrectionPlacer().placeCookies(temp);
		new StateSpacePlacer().placeCookies(temp, false);
		
		Util.fillCookiesArray(temp, iCookies);
/*
		for (int i = 0, j = 0; i < temp.length; i++) {
			Cookie c = temp[i];
			if (c instanceof CookieGroup) {
				CookieGroup cg = (CookieGroup) c;
				List sub = cg.getSubCookies();
				for (int k = 0, n = sub.size(); k < n; k++) {
					iCookies[j++] = (Cookie) sub.get(k);
				}
			}	else {
				iCookies[j++] = c;
			}
		}
*/
	}

	private CookieGroup joinCookies(Cookie c1, Cookie c2) {
			
		Vertex center = c1.getCentroid();
		Edge e1 = c1.getLongestEdge();
			
		c2 = c2.transform(c2.getCentroid(), Math.PI);
		Edge e2 = c2.getLongestEdge();
			
		double dx, dy, nx, ny, cx, cy;
			
		dx = e1.bx - e2.ax;
		dy = e1.by - e2.ay;
			
		cx = center.xpos();
		cy = center.ypos();
			
		nx = e1.ax + e1.bx - 2 * cx;
		ny = e1.ay + e1.by - 2 * cy;
			
		dx += (nx > 0) ? Cookie.kEpsilon : -Cookie.kEpsilon;
		dy += (ny > 0) ? Cookie.kEpsilon : -Cookie.kEpsilon;
			
		c2 = c2.shift(dx, dy);
		
		List cookies = new ArrayList(2);
		cookies.add(c1);
		cookies.add(c2);
			
		return new CookieGroup(cookies);
	}

}
