(function () {
	const root = document.getElementById("project-git-config");
	if (!root) return;
	const base = root.dataset.setUrl;
	if (!base) return;

	function showErr(msg) {
		try {
			alert(msg);
		} catch (e) {
			/* ignore */
		}
	}

	function onChange(ev) {
		const el = ev.target;
		const key = el.dataset.configKey;
		if (!key) return;
		const value = el.value;
		const url =
			base + "&key=" + encodeURIComponent(key) + "&value=" + encodeURIComponent(value);
		fetch(url, {
			method: "POST",
			credentials: "same-origin",
			headers: { Accept: "application/json" },
		})
			.then(async (r) => {
				if (!r.ok) {
					let detail = "Save failed";
					try {
						const j = await r.json();
						if (typeof j.detail === "string") detail = j.detail;
						else if (j.detail !== undefined) detail = JSON.stringify(j.detail);
					} catch (e) {
						try {
							detail = await r.text();
						} catch (e2) {
							/* ignore */
						}
					}
					throw new Error(detail);
				}
				return r.json();
			})
			.catch((err) => showErr(err.message || String(err)));
	}

	root.querySelectorAll("[data-config-key]").forEach((el) => {
		el.addEventListener("change", onChange);
	});

	root.querySelectorAll("[data-gitconfig-section]").forEach((section) => {
		const btn = section.querySelector(".gitconfig-section-toggle");
		const icon = section.querySelector(".gitconfig-toggle-icon");
		if (!btn) return;
		btn.addEventListener("click", (e) => {
			e.preventDefault();
			const hasCollapsed = section.classList.toggle("collapsed");
			btn.setAttribute("aria-expanded", hasCollapsed ? "false" : "true");
			if (icon) icon.textContent = hasCollapsed ? "+" : "\u2212";
		});
	});
})();