/**
 * Retrieves the translation of text.
 *
 * @see https://developer.wordpress.org/block-editor/reference-guides/packages/packages-i18n/
 */
import { __ } from "@wordpress/i18n";

/**
 * Use Effect Hook
 */
import { useEffect } from "@wordpress/element";

/**
 * React hook that is used to mark the block wrapper element.
 * It provides all the necessary props like the class name.
 *
 * @see https://developer.wordpress.org/block-editor/reference-guides/packages/packages-block-editor/#useblockprops
 */
import { useBlockProps, InnerBlocks } from "@wordpress/block-editor";

/**
 * Lets webpack process CSS, SASS or SCSS files referenced in JavaScript files.
 * Those files can contain any CSS code that gets applied to the editor.
 *
 * @see https://www.npmjs.com/package/@wordpress/scripts#using-css
 */
import "./editor.scss";
import SidePanel from "./side-panel";

/**
 * The edit function describes the structure of your block in the context of the
 * editor. This represents what the editor will render when the block is used.
 *
 * @see https://developer.wordpress.org/block-editor/reference-guides/block-api/block-edit-save/#edit
 *
 * @return {Element} Element to render.
 */
export default function Edit({ attributes, setAttributes }) {
	const blockProps = useBlockProps({
		className: "parallax-section",
	});

	const getBgStyle = () => {
		const { backgroundType, backgroundColor, image } = attributes;

		switch (backgroundType) {
			case "image":
				return image.url ? { backgroundImage: `url(${image.url})` } : {};
			case "color":
				return { backgroundColor };
			case "video":
				return {}; // Style vide car on utilise l'élément video
			default:
				return {};
		}
	};

	const renderBackground = () => {
		const { backgroundType, video, videoUrl, videoPoster } = attributes;

		if (backgroundType === "video" && (video?.url || videoUrl)) {
			return (
				<video
					autoPlay
					muted
					loop
					playsInline
					poster={videoPoster?.url || undefined}
				>
					<source src={video?.url || videoUrl} type="video/mp4" />
				</video>
			);
		}
		return null;
	};

	return (
		<section {...blockProps}>
			<div className="bg" style={getBgStyle()}>
				{renderBackground()}
			</div>
			<div className="content">
				<InnerBlocks />
			</div>
			<SidePanel attributes={attributes} setAttributes={setAttributes} />
		</section>
	);
}
