class Layouts {
	constructor() {
		this._layoutList = document.querySelector("#layouts-list")
		this._dropdown = document.querySelector("#layouts-dropdown")
		this._button = document.querySelector("#layouts-button")
		this._layouts = []

		this.layout = {}

		this._init()
	}

	_setDefault() {
		let name = this.layout.name
		let description = this.layout.description
		let short = this.layout.short_description
		this._button.innerHTML = name.toUpperCase() + (short ? ` (${short})` : "")
		//this._button.name = description
	}

	_setLayoutList() {
		let dropdown = this._dropdown
		dropdown.innerHTML = ""
		for (let i = 0; i < this._layouts.length; i++) {
			let name = this._layouts[i].name
			let description = this._layouts[i].description
			let short = this._layouts[i].short_description
			let li = document.createElement("li")
			let button = document.createElement("button")
			button.innerHTML = name + (short ? ` (${short})` : "")
			button.name = description
			button.addEventListener("click", () => {
				this.layout = this._layouts[i]
				this._setDefault()
				lightdm.layout = this.layout
			})
			li.appendChild(button)
			dropdown.appendChild(li)
		}
	}

	_setKeydown() {
		let dropdown = this._dropdown
		dropdown.addEventListener("keydown", (ev) => {
			if (ev.keyCode == 27) {
				dropdown.classList.add("hide")
				this._button.focus()
			}
		})
	}

	_setButton() {
		let dropdown = this._dropdown
		document.querySelector("#screen").addEventListener("click", (ev) => {
			if (ev.target == this._button || ev.target.parentElement == this._button) {
				dropdown.classList.toggle("hide")
			} else
			if (ev.target != dropdown && ev.target.closest(".dropdown") == null) {
				dropdown.classList.add("hide")
			}
		})
		document.querySelector("#screen").addEventListener("focusin", (ev) => {
			if (!dropdown.contains(document.activeElement) && document.activeElement != this._button) {
				dropdown.classList.add("hide")
			}
		})
	}

	_init() {
		this.layout = lightdm.layout
		this._layouts = greeter_config.layouts
		this._setDefault()
		this._setLayoutList()
		this._setButton()
		this._setKeydown()
	}
}