package model;

import java.util.ArrayList;
import java.util.List;

public abstract class Hitbox {
	String shape = null;// shape - Форма хитбокса. Понадобится при написании сохранения. Один из параметров в xml-file.
	Point referencePoint = new Point(0, 0); //Точка отсчета хитбокса, от нее рассчитывается высота+ширина/радиус(при круге) хитбокса.
	Entity owner;
	
	public Hitbox(){
	}
	//Либо так передавать shape, либо создать setShape. Но по сути shape определяется при создании обьекта, и тогда set - предоставление не нужных возможностей.
	public Hitbox(String shape){
		this.shape = new String(shape);
	}
	
	//informationHitbox -  default="Rectangle 0 0 96 98"
	//Предварительно, я бы сказал что вообще этот конструктор бесполезен и его можно удалить, 
	// т.к. Hitbox конструктор вызывается из дочерних элементов, а они уже владеют всей необходимой инфой, и entity owner задают сами
	// кстати забавно. сейчас устанавливается entity через serOwnerEntity, но как будто этот метод тоже излишек, ведь владелец хитбокса только один.
	//Но нет. у нас может быть хитбокс создан программно раньше entity, помню было такое где то, так что этот метод еще обоснован.
	public Hitbox(String informationHitbox, Entity owner){
		if(informationHitbox!= null) {
			setOwnerEntity(owner);
		    String[] informations = informationHitbox.split(" ");
		    shape = new String(informations[0]);
		}
	}
		
	
	public abstract String listPointsToString();
	
	
	/**
	 * @param result - Point object to store the result
	 * @return x and y converted to isometic coords
	 * */
	public static Point cartesianToIsometric(float cartX, float cartY, Point result) {
		result.x = cartX - cartY;
		result.y = (cartX + cartY) / 2;
		return result;
	}
	
	/**
	 * @param result - Point object to store the result
	 * @return x and y converted to cartesian coords
	 * */
	public static Point isometricToCartesian(float x, float y, Point result) {
		result.x = (2 * y + x) / 2;
		result.y = (2 * y - x) / 2;
		return result;
	}	
	public void setOwnerEntity(Entity owner) {
		this.owner = owner;
	}
	public Entity getOwnerEntity() {
		return owner;
	}
	
	public String getShape() {
		return shape;
	}
	public void calculationReferencePoint() {}
	
	//not the same as toString()! the latter is for XML while printToConsole() is for console
	public void printToConsole() {
		/*System.out.println();
		System.out.println("|||Hitbox:");
		if(shape!=null&&listPointsCartesian!=null) {
			System.out.println("Shape: " + shape);
			System.out.println("Cartesian: ");
			for(Point point: listPointsCartesian) {
				System.out.print("("+point.x+";"+point.y+") ");
				System.out.println("");
			}
			System.out.println("-----------");
			System.out.println("Iso: ");
			for(Point point: listPointsIso){
				System.out.print("("+point.x+";"+point.y+") ");
				System.out.println("");
			}
			System.out.println(" ");
		}else {
			System.out.println("null");
		}*/
	}
	//дописать функцию возвращения listPonts и shape(форма), если будет нужно.
	// так же при написании функции возвращения нужных координат, надо их сделать целочисленными.
}
