import { Plugin } from 'vite';
import { AxiosProxyConfig } from 'axios';

interface Options {
	/**
	 * Inject critical css between style tag.
	 * default: `true`
	 * */
	injectAsStyleTag?: boolean;

	/**
	 * Minify CSS code during build.
	 * default: value of `build.minify`
	 * */
	minifyCss?: boolean;

	/**
	 * Embed base64-encoded fonts into css.
	 * In some cases can cause filesize increase if css containes multiple references to same font file.
	 * default: `false`
	 * */
	embedFonts?: boolean;

	/**
	 * Load stylesheet asynchronously (using `media="print"`).
	 * Works only with `injectAsStyleTag:false`).
	 * default: `true`
	 * */
	async?: boolean;

	/**
	 * Persistently store downloaded css and font files in local file cache.
	 * If set to `false` the existing cache will be deleted.
	 * default: `true`
	 * */
	cache?: boolean;

	/**
	 * You can set proxy for network requests (using axios).
	 * default: `false`
	 */
	proxy?: false | AxiosProxyConfig;

	/**
	 * Moves downloaded font files to separate subfolder
	 * default: `''`
	 */
	assetsSubfolder?: string;

	/**
	 * Throw on error to make Vite build fail.
	 * default: `false`
	 */
	throwError?: boolean;
}

/**
 * A, Build:
 *    1. [hook] configResolved
 *       ↳ setBase()
 *       ↳ setAssetsDir()
 *       ↳ setMinifyCss()
 *       ↳ setResolvedLogger()
 *
 *    2. [hook] transformIndexHtml
 *       ↳ htmlFiles collect
 *
 *    3. [hook] generateBundle
 *       ↳ setEmitFileFunction()
 *       ↳ setGetFilenameFunction()
 *       ↳ clearWebfontUrlsHtml()
 *       ↳ collectWebfontsFromHtml()
 *       ↳ collectWebfontsFromBundleCss()
 *       ↳ downloadWebfontCss()
 *       ↳ parseFontDefinitions()
 *       ↳ downloadFonts()
 *       ↳ replaceFontUrls()
 *       ↳ saveCss()
 *       ↳ removeTagsFromHtml()
 *       ↳ injectToHtml()
 *
 *
 * B, Dev server:
 *    1. [hook] configResolved
 *       ↳ setBase()
 *       ↳ setAssetsDir()
 *       ↳ setMinifyCss()
 *       ↳ setResolvedLogger()
 *
 *    2. [hook] configureServer
 *       ↳ setIsDevServer(true)
 *       ↳ setAssetsDir('@webfonts')
 *       ↳ getDevServerMiddlewareCss()
 *       ↳ getDevServerMiddlewareGeneral()
 *
 *    3. [hook] transformIndexHtml
 *       ↳ clearWebfontUrlsHtml()
 *       ↳ collectWebfontsFromHtml()
 *       ↳ removeTagsFromHtml()
 *       ↳ injectToHtml()
 *
 *    4. [middleware] css (@webfonts/webfonts.css)
 *       ↳ loadDevServerFonts()
 *         ↳ downloadWebfontCss()
 *         ↳ parseFontDefinitions()
 *         ↳ replaceFontUrls()
 *         ↳ fontUrlsDevMap fill
 *       ↳ response: css (text)
 *
 *    5. [middleware] font (assets/xyz.woff2)
 *       ↳ check fontUrlsDevMap
 *       ↳ downloadFont()
 *       ↳ response: font (binary)
 */
declare function viteWebfontDownload(webfontUrls?: string | string[], options?: Options): Plugin;

export { viteWebfontDownload as ViteWebfontDownload, viteWebfontDownload as default, viteWebfontDownload as viteWebfontDl, viteWebfontDownload, viteWebfontDownload as webfontDl, viteWebfontDownload as webfontDownload };
