<?php
/**
 * Config related constants.
 *
 * @package Neve\Core\Settings
 */

namespace Neve\Core\Settings;

/**
 * Class Admin
 *
 * @package Neve\Core\Settings
 */
class Config {
	/**
	 * Link color - deprecated.
	 *
	 * @deprecated
	 */
	const MODS_LINK_COLOR = 'neve_link_color';
	/**
	 * Link hover color - deprecated.
	 *
	 * @deprecated
	 */
	const MODS_LINK_HOVER_COLOR           = 'neve_link_hover_color';
	const MODS_GLOBAL_COLORS              = 'neve_global_colors';
	const MODS_GLOBAL_CUSTOM_COLORS       = 'neve_global_custom_colors';
	const MODS_TEXT_COLOR                 = 'neve_text_color';
	const MODS_CONTAINER_WIDTH            = 'neve_container_width';
	const MODS_SITEWIDE_CONTENT_WIDTH     = 'neve_sitewide_content_width';
	const MODS_OTHERS_CONTENT_WIDTH       = 'neve_other_pages_content_width';
	const MODS_ARCHIVE_CONTENT_WIDTH      = 'neve_blog_archive_content_width';
	const MODS_SINGLE_CONTENT_WIDTH       = 'neve_single_post_content_width';
	const MODS_SHOP_ARCHIVE_CONTENT_WIDTH = 'neve_shop_archive_content_width';
	const MODS_SHOP_SINGLE_CONTENT_WIDTH  = 'neve_single_product_content_width';
	const MODS_ADVANCED_LAYOUT_OPTIONS    = 'neve_advanced_layout_options';
	const MODS_BUTTON_PRIMARY_STYLE       = 'neve_button_appearance';
	const MODS_BUTTON_SECONDARY_STYLE     = 'neve_secondary_button_appearance';
	const MODS_BUTTON_PRIMARY_PADDING     = 'neve_button_padding';
	/**
	 * Background color - deprecated.
	 *
	 * @deprecated
	 */
	const MODS_BACKGROUND_COLOR            = 'background_color';
	const MODS_BUTTON_SECONDARY_PADDING    = 'neve_secondary_button_padding';
	const MODS_TYPEFACE_GENERAL            = 'neve_typeface_general';
	const MODS_TYPEFACE_H1                 = 'neve_h1_typeface_general';
	const MODS_TYPEFACE_H2                 = 'neve_h2_typeface_general';
	const MODS_TYPEFACE_H3                 = 'neve_h3_typeface_general';
	const MODS_TYPEFACE_H4                 = 'neve_h4_typeface_general';
	const MODS_TYPEFACE_H5                 = 'neve_h5_typeface_general';
	const MODS_TYPEFACE_H6                 = 'neve_h6_typeface_general';
	const MODS_FONT_GENERAL                = 'neve_body_font_family';
	const MODS_FONT_GENERAL_VARIANTS       = 'neve_body_font_family_variants';
	const MODS_FONT_HEADINGS               = 'neve_headings_font_family';
	const MODS_DEFAULT_CONTAINER_STYLE     = 'neve_default_container_style';
	const MODS_SINGLE_POST_CONTAINER_STYLE = 'neve_single_post_container_style';

	const MODS_BUTTON_TYPEFACE           = 'neve_button_typeface';
	const MODS_SECONDARY_BUTTON_TYPEFACE = 'neve_secondary_button_typeface';

	const MODS_TYPEFACE_ARCHIVE_POST_TITLE   = 'neve_archive_typography_post_title';
	const MODS_TYPEFACE_ARCHIVE_POST_EXCERPT = 'neve_archive_typography_post_excerpt';
	const MODS_TYPEFACE_ARCHIVE_POST_META    = 'neve_archive_typography_post_meta';

	const MODS_TYPEFACE_SINGLE_POST_TITLE         = 'neve_single_post_typography_post_title';
	const MODS_TYPEFACE_SINGLE_POST_META          = 'neve_single_post_typography_post_meta';
	const MODS_TYPEFACE_SINGLE_POST_COMMENT_TITLE = 'neve_single_post_typography_comments_title';

	const MODS_FORM_FIELDS_PADDING          = 'neve_form_fields_padding';
	const MODS_FORM_FIELDS_SPACING          = 'neve_form_fields_spacing';
	const MODS_FORM_FIELDS_BACKGROUND_COLOR = 'neve_form_fields_background_color';
	const MODS_FORM_FIELDS_BORDER_WIDTH     = 'neve_form_fields_border_width';
	const MODS_FORM_FIELDS_BORDER_RADIUS    = 'neve_form_fields_border_radius';
	const MODS_FORM_FIELDS_BORDER_COLOR     = 'neve_form_fields_border_color';
	const MODS_FORM_FIELDS_LABELS_SPACING   = 'neve_label_spacing';
	const MODS_FORM_FIELDS_TYPEFACE         = 'neve_input_typeface';
	const MODS_FORM_FIELDS_COLOR            = 'neve_input_text_color';
	const MODS_FORM_FIELDS_LABELS_TYPEFACE  = 'neve_label_typeface';

	const MODS_ARCHIVE_POST_META_AUTHOR_AVATAR_SIZE = 'neve_author_avatar_size';
	const MODS_SINGLE_POST_META_AUTHOR_AVATAR_SIZE  = 'neve_single_post_avatar_size';
	const MODS_SINGLE_POST_ELEMENTS_SPACING         = 'neve_single_post_elements_spacing';

	const MODS_CONTENT_VSPACING             = 'neve_content_vspacing';
	const MODS_SINGLE_POST_VSPACING_INHERIT = 'neve_post_inherit_vspacing';
	const MODS_SINGLE_POST_CONTENT_VSPACING = 'neve_post_content_vspacing';

	const MODS_POST_TYPE_VSPACING_INHERIT = 'inherit_vspacing';
	const MODS_POST_TYPE_VSPACING         = 'content_vspacing';

	const OPTION_LOCAL_GOOGLE_FONTS_HOSTING = 'nv_pro_enable_local_fonts';

	const MODS_TPOGRAPHY_FONT_PAIRS = 'neve_font_pairs';

	/**
	 * This is only used in a dynamic context for all allowed post types
	 */
	const MODS_CONTENT_WIDTH                = 'content_width';
	const MODS_COVER_HEIGHT                 = 'cover_height';
	const MODS_COVER_PADDING                = 'cover_padding';
	const MODS_COVER_BACKGROUND_COLOR       = 'cover_background_color';
	const MODS_COVER_OVERLAY_OPACITY        = 'cover_overlay_opacity';
	const MODS_COVER_TEXT_COLOR             = 'cover_text_color';
	const MODS_COVER_BLEND_MODE             = 'cover_blend_mode';
	const MODS_COVER_TITLE_ALIGNMENT        = 'title_alignment';
	const MODS_COVER_TITLE_POSITION         = 'title_position';
	const MODS_COVER_BOXED_TITLE_PADDING    = 'cover_title_boxed_padding';
	const MODS_COVER_BOXED_TITLE_BACKGROUND = 'cover_title_boxed_background_color';

	const MODS_POST_COMMENTS_PADDING               = 'neve_comments_boxed_padding';
	const MODS_POST_COMMENTS_BACKGROUND_COLOR      = 'neve_comments_boxed_background_color';
	const MODS_POST_COMMENTS_TEXT_COLOR            = 'neve_comments_boxed_text_color';
	const MODS_POST_COMMENTS_FORM_PADDING          = 'neve_comments_form_boxed_padding';
	const MODS_POST_COMMENTS_FORM_BACKGROUND_COLOR = 'neve_comments_form_boxed_background_color';
	const MODS_POST_COMMENTS_FORM_TEXT_COLOR       = 'neve_comments_form_boxed_text_color';

	const CSS_PROP_BORDER_COLOR               = 'border-color';
	const CSS_PROP_BACKGROUND_COLOR           = 'background-color';
	const CSS_PROP_BACKGROUND                 = 'background';
	const CSS_PROP_COLOR                      = 'color';
	const CSS_PROP_MAX_WIDTH                  = 'max-width';
	const CSS_PROP_BORDER_RADIUS_TOP_LEFT     = 'border-top-left-radius';
	const CSS_PROP_BORDER_RADIUS_TOP_RIGHT    = 'border-top-right-radius';
	const CSS_PROP_BORDER_RADIUS_BOTTOM_RIGHT = 'border-bottom-right-radius';
	const CSS_PROP_BORDER_RADIUS_BOTTOM_LEFT  = 'border-bottom-left-radius';
	const CSS_PROP_BORDER_RADIUS              = 'border-radius';
	const CSS_PROP_BORDER_WIDTH               = 'border-width';
	const CSS_PROP_BORDER                     = 'border';
	const CSS_PROP_FLEX_BASIS                 = 'flex-basis';
	const CSS_PROP_PADDING                    = 'padding';
	const CSS_PROP_PADDING_RIGHT              = 'padding-right';
	const CSS_PROP_PADDING_LEFT               = 'padding-left';
	const CSS_PROP_MARGIN                     = 'margin';
	const CSS_PROP_MARGIN_LEFT                = 'margin-left';
	const CSS_PROP_MARGIN_RIGHT               = 'margin-right';
	const CSS_PROP_MARGIN_TOP                 = 'margin-top';
	const CSS_PROP_MARGIN_BOTTOM              = 'margin-bottom';
	const CSS_PROP_RIGHT                      = 'right';
	const CSS_PROP_LEFT                       = 'left';
	const CSS_PROP_WIDTH                      = 'width';
	const CSS_PROP_HEIGHT                     = 'height';
	const CSS_PROP_MIN_HEIGHT                 = 'min-height';
	const CSS_PROP_FONT_SIZE                  = 'font-size';
	const CSS_PROP_FILL_COLOR                 = 'fill';
	const CSS_PROP_LETTER_SPACING             = 'letter-spacing';
	const CSS_PROP_LINE_HEIGHT                = 'line-height';
	const CSS_PROP_FONT_WEIGHT                = 'font-weight';
	const CSS_PROP_TEXT_TRANSFORM             = 'text-transform';
	const CSS_PROP_FONT_FAMILY                = 'font-family';
	const CSS_PROP_BOX_SHADOW                 = 'box-shadow';
	const CSS_PROP_MIX_BLEND_MODE             = 'mix-blend-mode';
	const CSS_PROP_OPACITY                    = 'opacity';
	const CSS_PROP_GRID_TEMPLATE_COLS         = 'grid-template-columns';
	const CSS_PROP_DIRECTIONAL_ONE_AXIS       = 'directional-one-axis';
	const CSS_PROP_CUSTOM_BTN_TYPE            = 'btn-type';
	const CSS_PROP_CUSTOM_FONT_WEIGHT_FAMILY  = 'btn-type';

	const CSS_SELECTOR_BTN_PRIMARY_NORMAL          = 'buttons_primary_normal';
	const CSS_SELECTOR_BTN_PRIMARY_HOVER           = 'buttons_primary_hover';
	const CSS_SELECTOR_BTN_SECONDARY_NORMAL        = 'buttons_secondary_normal';
	const CSS_SELECTOR_BTN_SECONDARY_HOVER         = 'buttons_secondary_hover';
	const CSS_SELECTOR_BTN_SECONDARY_DEFAULT       = 'buttons_secondary_default';
	const CSS_SELECTOR_BTN_SECONDARY_DEFAULT_HOVER = 'buttons_secondary_default_hover';
	const CSS_SELECTOR_BTN_PRIMARY_PADDING         = 'buttons_primary_padding';
	const CSS_SELECTOR_BTN_SECONDARY_PADDING       = 'buttons_secondary_padding';
	const CSS_SELECTOR_TYPEFACE_GENERAL            = 'typeface_general';
	const CSS_SELECTOR_TYPEFACE_H1                 = 'typeface_h1';
	const CSS_SELECTOR_TYPEFACE_H2                 = 'typeface_h2';
	const CSS_SELECTOR_TYPEFACE_H3                 = 'typeface_h3';
	const CSS_SELECTOR_TYPEFACE_H4                 = 'typeface_h4';
	const CSS_SELECTOR_TYPEFACE_H5                 = 'typeface_h5';
	const CSS_SELECTOR_TYPEFACE_H6                 = 'typeface_h6';

	const CSS_SELECTOR_ARCHIVE_POST_TITLE   = 'archive_entry_title';
	const CSS_SELECTOR_ARCHIVE_POST_EXCERPT = 'archive_entry_summary';
	const CSS_SELECTOR_ARCHIVE_POST_META    = 'archive_entry_meta_list';

	const CSS_SELECTOR_SINGLE_POST_TITLE         = 'single_post_entry_title';
	const CSS_SELECTOR_SINGLE_POST_META          = 'single_post_entry_meta_list';
	const CSS_SELECTOR_SINGLE_POST_COMMENT_TITLE = 'single_post_comment_title';

	const CSS_SELECTOR_FORM_INPUTS_WITH_SPACING = 'form_inputs_no_search';
	const CSS_SELECTOR_FORM_INPUTS              = 'form_inputs';
	const CSS_SELECTOR_FORM_INPUTS_LABELS       = 'form_labels';
	const CSS_SELECTOR_FORM_BUTTON              = 'form_buttons';
	const CSS_SELECTOR_FORM_BUTTON_HOVER        = 'form_buttons_hover';
	const CSS_SELECTOR_FORM_SEARCH_INPUTS       = 'search_form_inputs';

	const CONTENT_DEFAULT_PADDING = 30;

	/**
	 * Keys for directional values.
	 *
	 * @var string[]
	 */
	public static $directional_keys = [ 'top', 'right', 'bottom', 'left' ];

	/**
	 * Holds tag->css selector mapper.
	 *
	 * @var array Mapper.
	 */
	public static $css_selectors_map = [
		self::CSS_SELECTOR_TYPEFACE_H1                 => 'h1, .single h1.entry-title',
		self::CSS_SELECTOR_TYPEFACE_H2                 => 'h2',
		self::CSS_SELECTOR_TYPEFACE_H3                 => 'h3, .woocommerce-checkout h3',
		self::CSS_SELECTOR_TYPEFACE_H4                 => 'h4',
		self::CSS_SELECTOR_TYPEFACE_H5                 => 'h5',
		self::CSS_SELECTOR_TYPEFACE_H6                 => 'h6',
		self::CSS_SELECTOR_TYPEFACE_GENERAL            => 'body, .site-title',
		self::CSS_SELECTOR_BTN_PRIMARY_PADDING         => '.button.button-primary, .wp-block-button.is-style-primary .wp-block-button__link,  .wc-block-grid .wp-block-button .wp-block-button__link',
		self::CSS_SELECTOR_BTN_SECONDARY_PADDING       => '.button.button-secondary:not(.secondary-default), .wp-block-button.is-style-secondary .wp-block-button__link',
		self::CSS_SELECTOR_BTN_PRIMARY_NORMAL          => '.button.button-primary,
				button, input[type=button],
				.btn, input[type="submit"],
				/* Buttons in navigation */
				ul[id^="nv-primary-navigation"] li.button.button-primary > a,
				.menu li.button.button-primary > a,  .wp-block-button.is-style-primary .wp-block-button__link,  .wc-block-grid .wp-block-button .wp-block-button__link',
		self::CSS_SELECTOR_BTN_PRIMARY_HOVER           => '.button.button-primary:hover,
				ul[id^="nv-primary-navigation"] li.button.button-primary > a:hover,
				.menu li.button.button-primary > a:hover, .wp-block-button.is-style-primary .wp-block-button__link:hover,  .wc-block-grid .wp-block-button .wp-block-button__link:hover',
		self::CSS_SELECTOR_BTN_SECONDARY_NORMAL        => '.button.button-secondary:not(.secondary-default),  .wp-block-button.is-style-secondary .wp-block-button__link',
		self::CSS_SELECTOR_BTN_SECONDARY_HOVER         => '.button.button-secondary:not(.secondary-default):hover,  .wp-block-button.is-style-secondary .wp-block-button__link:hover',
		self::CSS_SELECTOR_BTN_SECONDARY_DEFAULT       => '.button.button-secondary.secondary-default',
		self::CSS_SELECTOR_BTN_SECONDARY_DEFAULT_HOVER => '.button.button-secondary.secondary-default:hover',
		self::CSS_SELECTOR_ARCHIVE_POST_TITLE          => '.blog .blog-entry-title, .archive .blog-entry-title',
		self::CSS_SELECTOR_ARCHIVE_POST_EXCERPT        => '.blog .entry-summary, .archive .entry-summary, .blog .post-pages-links',
		self::CSS_SELECTOR_ARCHIVE_POST_META           => '.blog .nv-meta-list li, .archive .nv-meta-list li',
		self::CSS_SELECTOR_SINGLE_POST_TITLE           => '.single h1.entry-title',
		self::CSS_SELECTOR_SINGLE_POST_META            => '.single .nv-meta-list li',
		self::CSS_SELECTOR_SINGLE_POST_COMMENT_TITLE   => '.single .comment-reply-title',
		self::CSS_SELECTOR_FORM_INPUTS_WITH_SPACING    => 'form:not([role="search"]):not(.woocommerce-cart-form):not(.woocommerce-ordering):not(.cart) input:read-write:not(#coupon_code), form textarea, form select, .widget select',
		self::CSS_SELECTOR_FORM_INPUTS                 => 'form input:read-write, form textarea, form select, form select option, form.wp-block-search input.wp-block-search__input, .widget select',
		self::CSS_SELECTOR_FORM_INPUTS_LABELS          => 'form label, .wpforms-container .wpforms-field-label',
		self::CSS_SELECTOR_FORM_BUTTON                 => 'form input[type="submit"], form button:not(.search-submit)[type="submit"], form *[value*="ubmit"], #comments input[type="submit"]',
		self::CSS_SELECTOR_FORM_BUTTON_HOVER           => 'form input[type="submit"]:hover, form button:not(.search-submit)[type="submit"]:hover, form *[value*="ubmit"]:hover, #comments input[type="submit"]:hover',
		self::CSS_SELECTOR_FORM_SEARCH_INPUTS          => 'form.search-form input:read-write',
	];

	/**
	 * The default Font pairings available for all instances.
	 *
	 * Default preview size for fonts is 24px for heading and 16px for body.
	 *
	 * @var array[]
	 */
	public static $typography_default_pairs = [
		[
			'headingFont' => [
				'font'        => 'Inter',
				'fontSource'  => 'Google',
				'previewSize' => '25px',
			],
			'bodyFont'    => [
				'font'       => 'Inter',
				'fontSource' => 'Google',
			],
		],
		[
			'headingFont' => [
				'font'        => 'Playfair Display',
				'fontSource'  => 'Google',
				'previewSize' => '27px',
			],
			'bodyFont'    => [
				'font'        => 'Source Sans Pro',
				'fontSource'  => 'Google',
				'previewSize' => '18px',
			],
		],
		[
			'headingFont' => [
				'font'       => 'Montserrat',
				'fontSource' => 'Google',
			],
			'bodyFont'    => [
				'font'       => 'Open Sans',
				'fontSource' => 'Google',
			],
		],
		[
			'headingFont' => [
				'font'       => 'Nunito',
				'fontSource' => 'Google',
			],
			'bodyFont'    => [
				'font'       => 'Lora',
				'fontSource' => 'Google',
			],
		],
		[
			'headingFont' => [
				'font'       => 'Lato',
				'fontSource' => 'Google',
			],
			'bodyFont'    => [
				'font'       => 'Karla',
				'fontSource' => 'Google',
			],
		],
		[
			'headingFont' => [
				'font'        => 'Outfit',
				'fontSource'  => 'Google',
				'previewSize' => '25px',
			],
			'bodyFont'    => [
				'font'       => 'Spline Sans',
				'fontSource' => 'Google',
			],
		],
		[
			'headingFont' => [
				'font'        => 'Lora',
				'fontSource'  => 'Google',
				'previewSize' => '25px',
			],
			'bodyFont'    => [
				'font'       => 'Ubuntu',
				'fontSource' => 'Google',
			],
		],
		[
			'headingFont' => [
				'font'        => 'Prata',
				'fontSource'  => 'Google',
				'previewSize' => '25px',
			],
			'bodyFont'    => [
				'font'        => 'Hanken Grotesk',
				'fontSource'  => 'Google',
				'previewSize' => '17px',
			],
		],
		[
			'headingFont' => [
				'font'        => 'Albert Sans',
				'fontSource'  => 'Google',
				'previewSize' => '25px',
			],
			'bodyFont'    => [
				'font'        => 'Albert Sans',
				'fontSource'  => 'Google',
				'previewSize' => '17px',
			],
		],
		[
			'headingFont' => [
				'font'        => 'Fraunces',
				'fontSource'  => 'Google',
				'previewSize' => '25px',
			],
			'bodyFont'    => [
				'font'        => 'Hanken Grotesk',
				'fontSource'  => 'Google',
				'previewSize' => '17px',
			],
		],
	];
}
