package TodoListApp.GUI_UserInterface;

import TodoListApp.Domain.Fassade;

public class Userverwalter {

	private Fassade fassade;
	private GUI_UserInterface user;
	private GUI_addTask taskHinziFuegenFenster;
	private RemoveTask taskLöschenFenster;
	private MarkTask markTaskFenster;
	private int index = 0;

	public Userverwalter() {
		this.fassade = new Fassade();
		this.user = new GUI_UserInterface();
		this.taskHinziFuegenFenster = new GUI_addTask();
		this.taskLöschenFenster = new RemoveTask();
		this.markTaskFenster = new MarkTask();

		// Buttons User:
		user.getAddTask().addActionListener(e -> taskAddFenster());
	
		taskHinziFuegenFenster.getSubmitTask().addActionListener(e ->addTask()); 
		
		markTaskFenster.getMarkTaskButton().addActionListener(e -> markTaskAsDone());
		taskLöschenFenster.getRemoveTaskButton().addActionListener(e-> removeTask());
		user.getTaskDone().addActionListener(e ->zeigeMarkTaskFenster());
		user.getZeigeAlleGemachteTasks().addActionListener(e -> zeigeAlleGemachteTasks());
		
		user.getZeigeAlleTasks().addActionListener(e -> showAllTasks());
		user.getClear().addActionListener(e -> clearTextArea());
		user.getRemoveTask().addActionListener(e -> removeTaskFenster());

	}

	public void taskAddFenster() {
		taskHinziFuegenFenster.zeigeFensterAddTask();

	}

	public void addTask(){

		String title = taskHinziFuegenFenster.getTasktitle().getText();
		String beschreibung = taskHinziFuegenFenster.getTaskBeschreibung().getText();
		String priorität;
		if (taskHinziFuegenFenster.getHoch().isSelected())
			priorität = "hoch";
		else if (taskHinziFuegenFenster.getMittel().isSelected())
			priorität = "mittle";
		else if (taskHinziFuegenFenster.getNiedrig().isSelected())
			priorität = "niedrig";
		else
			priorität = "niedrig";

		fassade.addTask(title, beschreibung, priorität);
		taskHinziFuegenFenster.resetButtons();
		taskHinziFuegenFenster.showInfo("Neuer Task wurde Erfolgreich hinzugefügt!");
	}

	public void showAllTasks() {
		if (fassade.showAllTasks().size() == 0) 
			user.showInfo("Momentan befinden sich keine Taks");
		
		else if (index >= fassade.showAllTasks().size()) 
			user.showInfo("Es gibt keine Tasks mehr!");
			
		else {
			while (index < fassade.showAllTasks().size()) {
				user.getAllTasksArea().append(fassade.showAllTasks().get(index++));
				user.getAllTasksArea().append("\n");
			}
		}
		
	}
	
	public void removeTaskFenster() {
		taskLöschenFenster.zeigeFenster();
	}
	
	public void removeTask() {
		String title = taskLöschenFenster.getRemoveTaskEingabe().getText();
		if (fassade.removeTask(title)) {
			taskLöschenFenster.showInfo("Task erfolgreich gelöscht");
			clearTextArea();
			showAllTasks();
		}
		else
			taskLöschenFenster.showError("Task ist  nicht auf der Liste");
	}
	
	public void clearTextArea() {
		if (user.getAllTasksArea().getText().isEmpty())
			user.showInfo("Ist bereits leer!");
			
		user.getAllTasksArea().setText("");
		index = 0;
	}
	
	public void zeigeMarkTaskFenster() {
		markTaskFenster.zeigeFenster();
	}
	
	public void markTaskAsDone() {
		String title = markTaskFenster.getMarkTaskEingabe().getText();

		if (title.isEmpty())
			markTaskFenster.showError("Sie müssen Title eingeben");
		else if (fassade.markTaskAsDone(title)) {
			markTaskFenster.showInfo("Task ist als Gemacht makiert");
			clearTextArea();
			showAllTasks();
		}
	}
	
	public void zeigeAlleGemachteTasks() {
		if (fassade.getAllGemachteTasks().size() == 0)
			user.showInfo("Es gibt keine erledigte Tasks");
		else {
			clearTextArea();
			while (index < fassade.showAllTasks().size()) {
				user.getAllTasksArea().append(fassade.getAllGemachteTasks().get(index++));
				user.getAllTasksArea().append("\n");
			}
		}

	}
}

