import {
	addFilter,
} from '@wordpress/hooks'

const getVariableGoogleFontUrl = (url: string, id: string, config: Record<string, any>): string => {

	if(config.source !== 'variableGoogleFonts') {
		return url
	}

	const {
		font,
		wght = {},
		types = ['regular'],
	} = config

	if(!font) {
		return url
	}

	const {
		min,
		max,
	} = wght

	let weightsQueryString = ''
	const regular = types.includes('regular')
	const italic = types.includes('italic')
	if(min && max && (regular || italic)) {
		const wghts = `${min}..${max}`
		weightsQueryString = `:${italic ? 'ital,wght' : 'wght'}@${
			(regular && italic) ? `0,${wghts};1,${wghts}` : ( // ital,wght@0,400..900;1,400..900
				italic
					? `1,${wghts}` // ital,wght@1,400..900
					: `${wghts}` // wght@400..900
			)
		}`
	}

	return `https://fonts.googleapis.com/css2?family=${font.replaceAll(' ', '+')}${weightsQueryString}&display=swap`
}

export default () => {
	addFilter('ska.blocks.getFontUrl', 'ska-blocks/variable-google-font/url', getVariableGoogleFontUrl)
}
