window.h = maquette.h

class UiFileManager extends ZeroFrame
	init: ->
		@url_params = new URLSearchParams(window.location.search)
		@list_site = @url_params.get("site")
		@list_address = @url_params.get("address")
		@list_inner_path = @url_params.get("inner_path")
		@editor_inner_path = @url_params.get("file")
		@file_list = new FileList(@list_site, @list_inner_path)

		@site_info = null
		@server_info = null

		@is_sidebar_closed = false

		if @editor_inner_path
			@file_editor = new FileEditor(@editor_inner_path)

		window.onbeforeunload = =>
			if @file_editor?.isModified()
				return true
			else
				return null

		window.onresize = =>
			@checkBodyWidth()

		@checkBodyWidth()

		@cmd("wrapperSetViewport", "width=device-width, initial-scale=0.8")

		@cmd "serverInfo", {}, (server_info) =>
			@server_info = server_info
		@cmd "siteInfo", {}, (site_info) =>
			@cmd("wrapperSetTitle", "List: /#{@list_inner_path} - #{site_info.content.title} - ZeroNet")
			@site_info = site_info
			if @file_editor then @file_editor.on_loaded.then =>
				@file_editor.cm.setOption("readOnly", not site_info.settings.own)
				@file_editor.mode = if site_info.settings.own then "Edit" else "View"
			@projector.scheduleRender()

	checkBodyWidth: =>
		if not @file_editor
			return false

		if document.body.offsetWidth < 960 and not @is_sidebar_closed
			@is_sidebar_closed = true
			@projector?.scheduleRender()
		else if document.body.offsetWidth > 960 and @is_sidebar_closed
			@is_sidebar_closed = false
			@projector?.scheduleRender()

	onRequest: (cmd, message) =>
		if cmd == "setSiteInfo"
			@site_info = message
			RateLimitCb 1000, (cb_done) =>
				@file_list.update(cb_done)
			@projector.scheduleRender()
		else if cmd == "setServerInfo"
			@server_info = message
			@projector.scheduleRender()
		else
			@log "Unknown incoming message:", cmd

	createProjector: =>
		@projector = maquette.createProjector()
		@projector.replace($("#content"), @render)

	render: =>
		return h("div.content#content", [
			h("div.manager", {classes: {editing: @file_editor, sidebar_closed: @is_sidebar_closed}}, [
				@file_list.render(),
				if @file_editor then @file_editor.render()
			])
		])

window.Page = new UiFileManager()
window.Page.createProjector()