import { Date, Time, ComboBox } from "std-widgets.slint";
import { VTimePicker, VDatePicker, VButton, VTextInput, VText, Palette } from "@vynui";
import { Backend } from "../Backend.slint";

export struct NewEventParams {
	sourceId: int,
	title: string,
	date: Date,
	startsAt: Time,
	endsAt: Time
}

export struct SaveEventParams {
	sourceId: int,
	id: int,
	title: string,
	date: Date,
	startsAt: Time,
	endsAt: Time
}

export component EventWindow inherits Window {
	title: "Mirai - " + (eventId == -1 ? "New event" : "Edit event");
	min-width: 100px;
	max-width: 1920px;
	preferred-width: 512px;
	min-height: 100px;
	max-height: 4000px;
	default-font-size: 16px;
	background: Palette.background;

	in-out property<int> sourceId <=> sourceInput.current-index;
	in-out property<int> eventId: -1;
	in-out property<Date> taskDate <=> taskDateInput.date;
	in-out property<string> taskTitle <=> taskTitleInput.text;
	in-out property<Time> startsAt <=> eventStartTimeInput.time;
	in-out property<Time> endsAt <=> eventEndTimeInput.time;

	callback create(NewEventParams);
	callback save(SaveEventParams);

	VerticalLayout {
		padding: 16px;
		spacing: 8px;
		VText {
			text: eventId == -1 ? "New event" : "Edit event";
		}

		sourceInput := ComboBox {
			model: Backend.sources;
			enabled: eventId == -1;
		}

		taskTitleInput := VTextInput {
			label: "Title";
			wrap: word-wrap;
		}

		taskDateInput := VDatePicker {
			label: "Date";
		}

		HorizontalLayout {
			spacing: 4px;
			eventStartTimeInput := VTimePicker {
				label: "Starts at";
			}

			eventEndTimeInput := VTimePicker {
				label: "Ends at";
			}
		}


		VButton {
			text: eventId == -1 ? "Create" : "Save";
			clicked => {
				if (eventId == -1) {
					create({
						sourceId: sourceId,
						title: taskTitle,
						date: taskDate,
						startsAt: startsAt,
						endsAt: endsAt,
					});
				} else {
					save({
						sourceId: sourceId,
						id: eventId,
						title: taskTitle,
						date: taskDate,
						startsAt: startsAt,
						endsAt: endsAt,
					});
				}
			}
		}
	}
}

export { Backend }
