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,
	};
};
