import { AppWindowModels } from "../windows/AppWindow/Models.slint";
import { Date, Time, Button, VerticalBox, CheckBox, ScrollView, ComboBox } from "std-widgets.slint";
import { VPopupIconMenu, VDatePicker, VTimePicker, VCheckBox, VButton, VActionButton, VTag, VText, Svg, VTextInput, Palette } from "@selenite";

export struct CreateTaskData {
	sourceId: int,
	title: string,
	date: Date
}

export component CreateTaskOrEvent inherits Rectangle {

	in property <[string]> sources;

	callback create-task(CreateTaskData);

	function accepted() {
		root.create-task({
			sourceId: AppWindowModels.get-source-id-from-name(sourceInput.current-value),
			title: newTaskTitleInput.text,
			date: taskDateInput.date
		});
		newTaskTitleInput.edit-text("");
	}

	Rectangle {
		border-color: newTaskTitleInput.text != "" ? Palette.card-background : transparent;
		border-width: newTaskTitleInput.text != "" ? 4px : 0px;
		border-radius: newTaskTitleInput.text != "" ? 8px : 0px;
		animate border-color, border-width {
			duration: 250ms;
		}
		VerticalLayout {
			spacing: 8px;
			padding: newTaskTitleInput.text != "" ? 16px : 0px;
			animate padding {
				duration: 250ms;
			}
			newTaskTitleInput := VTextInput {
				placeholder: "Add new Task / Event";
			 	started-writting() => {
					sourceInput.current-index = AppWindowModels.default-source-index;
			 	}
				accepted => { accepted() }
			}
			Rectangle {
				min-height: 0px;
				max-height: newTaskTitleInput.text != "" ? 512px : 0px;
				opacity: newTaskTitleInput.text != "" ? 1 : 0;
				clip: true;
				animate max-height, opacity {
					 duration: 250ms;
				}
				
				HorizontalLayout {
					alignment: start;
					spacing: 8px;
					VText { text: "for"; vertical-alignment: bottom;}
					VerticalLayout {
						alignment: end;
						sourceInput := ComboBox {
							model: root.sources; 
							
						}
					}
					VText { text: "on"; vertical-alignment: bottom;}
					taskDateInput := VDatePicker {
						enabled: true;
					}
					VButton {
						text: "Create";
						icon-svg: Svg.correct;
						icon-colorize: greenyellow;
						clicked => { accepted() }
					}
				}
			}
		}
	}
}
