package gui;

import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JList;
import javax.swing.JTabbedPane;
import javax.swing.event.ListSelectionEvent;

import events.EntityDrawboxChangedEvent;
import events.EntityDrawboxChangedListener;
import events.EntityHitboxChangedEvent;
import events.EntityHitboxChangedListener;
import model.Hitbox;
import model.HitboxCircle;
import model.HitboxRectangle;
import model.Point;
import repository.Project;


public class HitboxEditor extends Editable {

	JButton changeInRectangleHitboxJButton;
	JButton changeInCircleHitboxJButton;
	
	
	HitboxEditor(ListGUI listGUI) {
		super(listGUI);
		
		canvas = new EditableCanvas();
		add(canvas);
        canvas.setHitboxRectengleRenderingFunction();
        canvas.setVisible(true);
        
        changeInRectangleHitboxJButton = super.createButton("Hitbox Rectangle",null,"res/square.png");
        changeInCircleHitboxJButton = super.createButton("Hitbox circle",null,"res/circle.png");
        toolbar.add(changeInRectangleHitboxJButton);
        toolbar.add(changeInCircleHitboxJButton);

        changeInRectangleHitboxJButton.addActionListener((e)->{
        	functionClearHitboxJButton();
        	entity.setHitbox(new HitboxRectangle("Rectangle",entity));
        	canvas.setHitboxRectengleRenderingFunction();
        	//Сделать создание нового Hitbox формы Rectengle
        });
        changeInCircleHitboxJButton.addActionListener((e)->{
        	functionClearHitboxJButton();
        	entity.setHitbox(new HitboxCircle("Circle",entity));
        	canvas.setHitboxCircleRenderingFunction();
        	//Сделать создание нового Hitbox формы Circle
        });
        
	}
	public void functionClearHitboxJButton() {
		if(entity != null) {
			canvas.renderingFunction.functionClearJButton();
			canvas.repaint();
		}
	}
	//НАДО ДОБАВИТЬ ЧТО БЫ ПОД КОНЕЦ РИСОВАНИЯ ХИТБОКСА ОНО ВЫЗЫВАЛО ФУНКЦИЮ И ВСЕ СОХРАНЯЛО.
	//СОХРАНЕНИЕ УЖЕ РЕАЛИЗОВАНО.
	//НО НЕ ДОБАВЛЕН ВЫЗОВ ФУНКЦИИ И НЕ ОФОРМЛЕНА ПОДПИСКА 
	//UPD: вроде подписку оформил в MainGUI;
	@Override
	public void valueChanged(ListSelectionEvent e) {
		if(e.getSource() instanceof JList) {
    		//TODO: надо бы элегантнее пробросить сюда ListGUI - просто передача его в аргументах немножко громоздкая
    		// как-то обыграть это через события? 
    		// ps. попытки обратиться к eventSource проваливаются - ListGUI это панель, уже внутри которой лежит JList
    		selectedEntityName = listGUI.getSelectedName();
    		try {
				entity = Project.getInstance().getEntityByName(selectedEntityName);
			} catch (Exception e1) {
				//logger.severe("Entity with name '"+selectedEntityName+"' was not found! Cannot display it on panel!");
			}
    		image = Project.getInstance().loadImageByName(selectedEntityName);
    		//TODO: if(image == null) вызов FileChooser'a и выбор изображения
    		canvas.setEntity(entity);
    		canvas.setImage(image);
    		if(entity.getHitbox().getShape().equals("Rectangle")) {
    			canvas.setHitboxRectengleRenderingFunction();
    		}
    		if(entity.getHitbox().getShape().equals("Circle")) {
    			canvas.setHitboxCircleRenderingFunction();
    		}
    		canvas.repaint();
		}
	}


}
