import java.awt.Point;
import java.awt.Rectangle;

import org.opencv.core.Rect2d;



public class DetectedObject {
	
	private Rect2d boundingBox;
	private float detectionScore;
	private String detectionClass;
	
	public DetectedObject(float detectionScore, float detectionClass, float[] detectionBox) {
		this.boundingBox = initializeBoundingBox(detectionBox);
		this.detectionScore = detectionScore;
		this.detectionClass = initializeLabel(detectionClass);
	}
	
	// TODO: migrate this all to a Rect2d data type
	private Rect2d initializeBoundingBox(float[] detectionBox) {
		int offset_x = (int) (detectionBox[1] * Constants.GAME_WINDOW_WIDTH);
		int offset_y = (int) (detectionBox[0] * Constants.GAME_WINDOW_HEIGHT);
		int width = (int) (detectionBox[3] * Constants.GAME_WINDOW_WIDTH) - offset_x;
		int height = (int) (detectionBox[2] * Constants.GAME_WINDOW_HEIGHT) - offset_y;
		return new Rect2d(offset_x, offset_y, width, height);
	}
	
	private String initializeLabel(float detectionClass) {
		// TODO: actually load these from a file
		String[] labels = {"NA", "ironOre", "ore"};
		return labels[(int) detectionClass];
	}
	
	public String getDetectionClass() {
		return detectionClass;
	}
	
	public Rect2d getBoundingRect2d() {
		return new Rect2d(boundingBox.x, boundingBox.y, boundingBox.width, boundingBox.height);
	}
	
	public Point getCenterForClicking() {
		return new Point((int) (boundingBox.x + boundingBox.width / 2 + Constants.GAME_WINDOW_OFFSET_X), (int) (boundingBox.y + boundingBox.height / 2 + Constants.GAME_WINDOW_OFFSET_Y));
	}
	
	public void display() {
		System.out.println(detectionClass + " with score " + detectionScore + " at (" + getCenterForClicking().x + "," + getCenterForClicking().y + ")");
	}
}
