import CookieSameSiteEnum from '../enums/CookieSameSiteEnum.js';
import type URL from '../../url/URL.js';
import type ICookie from '../ICookie.js';

/**
 * Cookie string.
 */
export default class CookieURLUtility {
	/**
	 * Returns "true" if cookie matches URL.
	 *
	 * @param cookie Cookie.
	 * @param url URL.
	 * @returns "true" if cookie matches URL.
	 */
	public static cookieMatchesURL(cookie: ICookie, url: URL): boolean {
		const isLocalhost = url.hostname === 'localhost' || url.hostname?.endsWith('.localhost');
		return (
			(!cookie.secure || url.protocol === 'https:' || isLocalhost) &&
			(!cookie.domain || url.hostname?.endsWith(cookie.domain)) &&
			(!cookie.path || url.pathname?.startsWith(cookie.path)) &&
			// @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#samesitesamesite-value
			((cookie.sameSite === CookieSameSiteEnum.none && cookie.secure) ||
				cookie.originURL?.hostname === url.hostname)
		);
	}
}
