import { __ } from "@wordpress/i18n";
import { InspectorControls } from "@wordpress/block-editor";
import {
	PanelBody,
	SelectControl,
	ComboboxControl,
} from "@wordpress/components";
import "./editor.scss";
import { Tip } from "@wordpress/components";

import { useSelect } from "@wordpress/data";
import { useEffect, useState } from "@wordpress/element";
import { decodeEntities } from "@wordpress/html-entities";

export default function OptionsSelectControl({ setAttributes, relatedPostId }) {
	let [relatedQuestionPages, setRelatedQuestionPages] = useState(null);

	const editUrl = relatedPostId
		? `${window.location.origin}/wp-admin/post.php?post=${relatedPostId}&action=edit`
		: null;
	const lang = getAdminLanguageFromCookie("wp-wpml_current_language");

	function getAdminLanguageFromCookie(c_name) {
		var c_value = document.cookie,
			c_start = c_value.indexOf(" " + c_name + "=");
		if (c_start == -1) c_start = c_value.indexOf(c_name + "=");
		if (c_start == -1) {
			c_value = null;
		} else {
			c_start = c_value.indexOf("=", c_start) + 1;
			var c_end = c_value.indexOf(";", c_start);
			if (c_end == -1) {
				c_end = c_value.length;
			}
			c_value = unescape(c_value.substring(c_start, c_end));
		}
		return c_value;
	}

	function handleRelatedPostChange(postId) {
		setAttributes({ relatedPostId: Number(postId) });
	}
	function buildSelectOptions(relatedPossiblePages) {
		let options = [];
		if (relatedPossiblePages) {
			options.push({ value: 0, label: "Selectionnez une page" });
			relatedPossiblePages.forEach((page) => {
				options.push({
					value: page.id,
					label: decodeEntities(page.title.rendered),
				});
			});
		} else {
			options.push({ value: 0, label: "Pas encore de questions..." });
		}
		return options;
	}

	// GET TAXONOMIES INOFRMATION
	let postTaxonomies = useSelect((select) =>
		select("core/editor").getCurrentPostAttribute("thematiques")
	);
	let postMainTaxonomy = useSelect(
		(select) =>
			select("core").getEntityRecord(
				"taxonomy",
				"thematiques",
				postTaxonomies[0]
			),
		[postTaxonomies]
	);
	let postParentTaxonomy = useSelect(
		(select) => {
			if (postMainTaxonomy && postMainTaxonomy.parent) {
				return select("core").getEntityRecord(
					"taxonomy",
					"thematiques",
					postMainTaxonomy.parent
				);
			}
			return null;
		},
		[postMainTaxonomy]
	);

	// GET RELATED POSSIBLE PAGES ACCORDING TO CURRENT TAXONOMY
	const relatedPossiblePages = useSelect((select) => {
		if (postMainTaxonomy) {
			let query = {
				status: ["publish", "draft"],
				per_page: -1,
				thematiques: postMainTaxonomy ? postMainTaxonomy.id : null,
				// lang: lang,
			};
			return select("core").getEntityRecords("postType", "questions", query);
		}
		return null;
	});

	useEffect(() => {
		if (relatedPossiblePages) {
			setRelatedQuestionPages(buildSelectOptions(relatedPossiblePages));
		}
	}, [relatedPossiblePages]);

	let currentGeneralThematique = postParentTaxonomy ?? postMainTaxonomy ?? null;

	let panelTitle = postParentTaxonomy
		? "Questions " + postParentTaxonomy.name
		: postMainTaxonomy
		? "Questions " + postMainTaxonomy.name
		: null;

	return (
		<InspectorControls>
			<PanelBody title={__("Question Relié", "homegrade-blocks")}>
				{/* <SelectControl
					label={panelTitle}
					value={relatedPostId}
					options={relatedQuestionPages}
					onChange={(e) => handleRelatedPostChange(e)}
				/> */}

				{relatedQuestionPages && (
					<ComboboxControl
						label={panelTitle}
						value={relatedPostId}
						options={relatedQuestionPages}
						onChange={(e) => handleRelatedPostChange(e)}
					/>
				)}

				{relatedPostId && (
					<Tip>
						{__(
							"Pour modifier le contenu de la question affichée ici, rendez-vous dans la fiche question correspondante.",
							"homegrade-blocks"
						)}
					</Tip>
				)}
				{relatedPostId && editUrl && (
					<a href={editUrl} className="edit-question-button">
						Editer la question
					</a>
				)}
			</PanelBody>
		</InspectorControls>
	);
}
