<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
import { applyFilters } from '@wordpress/hooks';

export const getMediaDetails = (media) => {
	if (!media) return {};

	const defaultSize = applyFilters(
		'editor.PostFeaturedImage.imageSize',
		'large',
		media.id,
	);
	if (defaultSize in (media?.media_details?.sizes ?? {})) {
		return {
			mediaWidth: media.media_details.sizes[defaultSize].width,
			mediaHeight: media.media_details.sizes[defaultSize].height,
			mediaSourceUrl: media.media_details.sizes[defaultSize].source_url,
		};
	}

	const mediumSize = applyFilters(
		'editor.PostFeaturedImage.imageSize',
		'medium',
		media.id,
	);
	if (mediumSize in (media?.media_details?.sizes ?? {})) {
		return {
			mediaWidth: media.media_details.sizes[mediumSize].width,
			mediaHeight: media.media_details.sizes[mediumSize].height,
			mediaSourceUrl: media.media_details.sizes[mediumSize].source_url,
		};
	}

	// Use fallbackSize when defaultSize is not available.
	const fallbackSize = applyFilters(
		'editor.PostFeaturedImage.imageSize',
		'thumbnail',
		media.id,
	);
	if (fallbackSize in (media?.media_details?.sizes ?? {})) {
		return {
			mediaWidth: media.media_details.sizes[fallbackSize].width,
			mediaHeight: media.media_details.sizes[fallbackSize].height,
			mediaSourceUrl: media.media_details.sizes[fallbackSize].source_url,
		};
	}

	// Use full image size when fallbackSize and defaultSize are not available.
	return {
		mediaWidth: media.media_details.width,
		mediaHeight: media.media_details.height,
		mediaSourceUrl: media.source_url,
	};
};
