<?php
/**
 * Site Layouts - Dynamic CSS
 *
 * @package Astra Addon
 */

add_filter( 'astra_addon_dynamic_css', 'astra_ext_site_layouts_dynamic_css' );

/**
 * Dynamic CSS
 *
 * @param  string $dynamic_css          Astra Dynamic CSS.
 * @param  string $dynamic_css_filtered Astra Dynamic CSS Filters.
 * @return string
 */
function astra_ext_site_layouts_dynamic_css( $dynamic_css, $dynamic_css_filtered = '' ) {

	/**
	 * - Variable Declaration
	 */
	$page_width            = '100%';
	$parse_css             = '';
	$layout                = astra_get_option( 'site-layout', 'ast-full-width-layout' );
	$single_post_max       = astra_get_option( 'blog-single-width' );
	$single_post_max_width = astra_get_option( 'blog-single-max-width' );
	$blog_width            = astra_get_option( 'blog-width' );
	$blog_max_width        = astra_get_option( 'blog-max-width' );

	$woo_shop_archive_width = astra_get_option( 'shop-archive-width' );

	// set page width depending on site layout.
	if ( 'ast-box-layout' == $layout ) {
		$page_width = astra_get_option( 'site-layout-box-width' ) . 'px';
	} elseif ( 'ast-full-width-layout' == $layout ) {
		$page_width = ASTRA_THEME_CONTAINER_PADDING_TWICE + astra_get_option( 'site-content-width' ) . 'px';
	} elseif ( 'ast-padded-layout' == $layout ) {
		if ( '' != astra_get_option( 'site-layout-padded-width' ) ) {
			$page_width = ASTRA_THEME_CONTAINER_BOX_PADDED_PADDING_TWICE + astra_get_option( 'site-layout-padded-width' ) . 'px';
		}
	}

	// Fluid layout padding.
	$fluid_layout_padding = astra_get_option( 'site-layout-fluid-lr-padding' );

	// Box Layout - Top & Bottom Margin.
	$box_topbottom_margin = astra_get_option( 'site-layout-box-tb-margin' );

	// Box Layout - Background Color / Image.
	$box_bg_color = astra_get_option( 'site-layout-outside-bg-color' );

	// Padded Layout - Padding.
	$padded_layout_padding = astra_get_option( 'site-layout-padded-pad' );

	$body_font_weight = astra_get_option( 'body-font-weight' );

	if ( 'ast-box-layout' == $layout || 'ast-padded-layout' == $layout ) {
		$blog_max_width        = absint( $blog_max_width ) + ASTRA_THEME_CONTAINER_BOX_PADDED_PADDING_TWICE;
		$single_post_max_width = absint( $single_post_max_width ) + ASTRA_THEME_CONTAINER_BOX_PADDED_PADDING_TWICE;
	} else {
		$blog_max_width        = absint( $blog_max_width ) + ASTRA_THEME_CONTAINER_PADDING_TWICE;
		$single_post_max_width = absint( $single_post_max_width ) + ASTRA_THEME_CONTAINER_PADDING_TWICE;
	}

	/* Global Responsive */
	$global_responsive_media = array(
		'.ast-container' => array(
			'max-width' => esc_attr( $page_width ),
		),
	);

	/* Parse CSS from array()*/
	$parse_css .= astra_parse_css( $global_responsive_media, astra_addon_get_tablet_breakpoint( '', 1 ) );
	$parse_css .= astra_parse_css( $global_responsive_media, '993' );
	$parse_css .= astra_parse_css( $global_responsive_media, '1201' );

	if ( 'default' == $woo_shop_archive_width ) {

		if ( 'page-builder' !== astra_get_content_layout() ) {
			/* Global Responsive for default woocommerce shop archive page */
			$woo_shop_archive_responsive_media = array(
				'.ast-woo-shop-archive .site-content > .ast-container' => array(
					'max-width' => esc_attr( $page_width ),
				),
			);

			/* Parse CSS from array()*/
			$parse_css .= astra_parse_css( $woo_shop_archive_responsive_media, astra_addon_get_tablet_breakpoint( '', 1 ) );
			$parse_css .= astra_parse_css( $woo_shop_archive_responsive_media, '993' );
			$parse_css .= astra_parse_css( $woo_shop_archive_responsive_media, '1201' );
		}
	}

	/* Fluid Width Layout CSS */
	if ( 'ast-fluid-width-layout' == $layout ) :
		$fw_layout          = '@media (min-width: ' . astra_addon_get_tablet_breakpoint( '', 1 ) . 'px) {';
			$fw_layout     .= '.ast-container {';
				$fw_layout .= 'padding-left:' . esc_attr( $fluid_layout_padding ) . 'px;';
				$fw_layout .= 'padding-right:' . esc_attr( $fluid_layout_padding ) . 'px;';
			$fw_layout     .= '}';
		$fw_layout         .= '}';
		$parse_css         .= $fw_layout;

		if ( 'default' === $woo_shop_archive_width ) :
			$woo_shop_archive_padding_css  = '@media (min-width:921px) {';
			$woo_shop_archive_padding_css .= 'body.ast-woo-shop-archive .site-content > .ast-container{';
			$woo_shop_archive_padding_css .= 'padding-left:' . esc_attr( $fluid_layout_padding ) . 'px;';
			$woo_shop_archive_padding_css .= 'padding-right:' . esc_attr( $fluid_layout_padding ) . 'px;';
			$woo_shop_archive_padding_css .= '}';
			$woo_shop_archive_padding_css .= '}';
			$parse_css                    .= $woo_shop_archive_padding_css;
		endif;

	endif;

	/* Box Layout CSS */
	if ( 'ast-box-layout' == $layout ) :
		$box_layout = array(
			'#page' => array(
				'max-width'    => $page_width,
				'margin-left'  => 'auto',
				'margin-right' => 'auto',
			),
		);

		/* Parse CSS from array()*/
		$parse_css .= astra_parse_css( $box_layout );

		$bx_layout          = '@media (min-width:' . astra_addon_get_tablet_breakpoint( '', 1 ) . 'px) {';
			$bx_layout     .= '#page{';
				$bx_layout .= 'margin-top:' . esc_attr( $box_topbottom_margin ) . 'px;';
				$bx_layout .= 'margin-bottom:' . esc_attr( $box_topbottom_margin ) . 'px;';
			$bx_layout     .= '}';
			$bx_layout     .= ' .ast-container{';
				$bx_layout .= 'padding-left: ' . ASTRA_THEME_CONTAINER_BOX_PADDED_PADDING . 'px;';
				$bx_layout .= 'padding-right: ' . ASTRA_THEME_CONTAINER_BOX_PADDED_PADDING . 'px;';
			$bx_layout     .= '}';
		$bx_layout         .= '}';
		$parse_css         .= $bx_layout;
	endif;

	/* Padded Layout CSS */
	if ( 'ast-padded-layout' == $layout ) :
		$padded_layout = array(
			'body' => array(
				'background' => $box_bg_color,
			),
		);

		/* Parse CSS from array()*/
		$parse_css .= astra_parse_css( $padded_layout );

		/**
		 * Padded layout Desktop Spacing
		 */
		$padded_layout_spacing = array(
			'body.ast-padded-layout'         => array(
				'padding-top'    => astra_responsive_spacing( $padded_layout_padding, 'top', 'desktop' ),
				'padding-right'  => astra_responsive_spacing( $padded_layout_padding, 'right', 'desktop' ),
				'padding-bottom' => astra_responsive_spacing( $padded_layout_padding, 'bottom', 'desktop' ),
				'padding-left'   => astra_responsive_spacing( $padded_layout_padding, 'left', 'desktop' ),
			),
			'body.ast-padded-layout::before' => array(
				'padding-top' => astra_responsive_spacing( $padded_layout_padding, 'top', 'desktop' ),
			),
			'body.ast-padded-layout::after'  => array(
				'padding-bottom' => astra_responsive_spacing( $padded_layout_padding, 'bottom', 'desktop' ),
			),
		);

		$parse_css .= astra_parse_css( $padded_layout_spacing );

		/**
		 * Padded layout Tablet Spacing
		 */
		$tablet_padded_layout_spacing = array(
			'body.ast-padded-layout'         => array(
				'padding-top'    => astra_responsive_spacing( $padded_layout_padding, 'top', 'tablet' ),
				'padding-right'  => astra_responsive_spacing( $padded_layout_padding, 'right', 'tablet' ),
				'padding-bottom' => astra_responsive_spacing( $padded_layout_padding, 'bottom', 'tablet' ),
				'padding-left'   => astra_responsive_spacing( $padded_layout_padding, 'left', 'tablet' ),

			),
			'body.ast-padded-layout::before' => array(
				'padding-top' => astra_responsive_spacing( $padded_layout_padding, 'top', 'tablet' ),
			),
			'body.ast-padded-layout::after'  => array(
				'padding-bottom' => astra_responsive_spacing( $padded_layout_padding, 'bottom', 'tablet' ),
			),
		);

		/**
		 * Padded layout Mobile Spacing
		 */
		$mobile_padded_layout_spacing = array(
			'body.ast-padded-layout'         => array(
				'padding-top'    => astra_responsive_spacing( $padded_layout_padding, 'top', 'mobile' ),
				'padding-right'  => astra_responsive_spacing( $padded_layout_padding, 'right', 'mobile' ),
				'padding-bottom' => astra_responsive_spacing( $padded_layout_padding, 'bottom', 'mobile' ),
				'padding-left'   => astra_responsive_spacing( $padded_layout_padding, 'left', 'mobile' ),
			),
			'body.ast-padded-layout::before' => array(
				'padding-top' => astra_responsive_spacing( $padded_layout_padding, 'top', 'mobile' ),
			),
			'body.ast-padded-layout::after'  => array(
				'padding-bottom' => astra_responsive_spacing( $padded_layout_padding, 'bottom', 'mobile' ),
			),
		);

		/**
		 * Padded layout Container Spacing
		 */
		$padded_width = astra_get_option( 'site-layout-padded-width' );
		if ( ! empty( $padded_width ) ) {
			$padded_layout_spacing_container = array(
				'.ast-container' => array(
					'padding-left'  => ASTRA_THEME_CONTAINER_BOX_PADDED_PADDING . 'px',
					'padding-right' => ASTRA_THEME_CONTAINER_BOX_PADDED_PADDING . 'px',
				),
			);
		} else {
			$padded_layout_spacing_container = array(
				'.site-content > .ast-container' => array(
					'padding-left'  => 0,
					'padding-right' => 0,
				),
			);
		}
		// Add Container padding only for desktop devices.
		$parse_css .= astra_parse_css( $padded_layout_spacing_container, astra_addon_get_tablet_breakpoint( '', 1 ) );

		$parse_css .= astra_parse_css( $padded_layout_spacing );
		$parse_css .= astra_parse_css( $tablet_padded_layout_spacing, '', astra_addon_get_tablet_breakpoint() );
		$parse_css .= astra_parse_css( $mobile_padded_layout_spacing, '', astra_addon_get_mobile_breakpoint() );

	endif;

	/* Blog */
	if ( 'ast-fluid-width-layout' == $layout ) :
		if ( 'custom' === $blog_width ) :
			$blog_css   = '@media (min-width:921px) {';
			$blog_css  .= '.blog .site-content > .ast-container, .archive .site-content > .ast-container, .search .site-content > .ast-container{';
			$blog_css  .= 'padding-left:' . ASTRA_THEME_CONTAINER_PADDING . 'px;';
			$blog_css  .= 'padding-right:' . ASTRA_THEME_CONTAINER_PADDING . 'px;';
			$blog_css  .= '}';
			$blog_css  .= '}';
			$parse_css .= $blog_css;
		endif;
		if ( 'custom' === $woo_shop_archive_width ) :
			$woo_shop_archive_css  = '@media (min-width:921px) {';
			$woo_shop_archive_css .= '.ast-woo-shop-archive .site-content > .ast-container{';
			$woo_shop_archive_css .= 'padding-left:' . ASTRA_THEME_CONTAINER_PADDING . 'px;';
			$woo_shop_archive_css .= 'padding-right:' . ASTRA_THEME_CONTAINER_PADDING . 'px;';
			$woo_shop_archive_css .= '}';
			$woo_shop_archive_css .= '}';
			$parse_css            .= $woo_shop_archive_css;
		endif;
	endif;

	/* Single Blog */
	if ( 'ast-fluid-width-layout' == $layout ) :
		if ( 'custom' === $single_post_max ) :
			$single_blog_css  = '@media (min-width:921px) {';
			$single_blog_css .= '.single .site-content > .ast-container{';
			$single_blog_css .= 'padding-left:' . ASTRA_THEME_CONTAINER_PADDING . 'px;';
			$single_blog_css .= 'padding-right:' . ASTRA_THEME_CONTAINER_PADDING . 'px;';
			$single_blog_css .= '}';
			$single_blog_css .= '}';
			$parse_css       .= $single_blog_css;
		endif;
	endif;

	/** Scroll to top compatibility with padded layout. */
	if ( 'ast-padded-layout' === $layout && true === astra_get_option( 'scroll-to-top-enable', true ) ) :
		$scroll_to_top_icon_alignment = astra_get_option( 'scroll-to-top-icon-position' );
		$scroll_to_top_padded_padding = apply_filters( 'astra_scroll_top_padded_padding', 30 );
		$padded_layout_padding        = astra_get_option( 'site-layout-padded-pad' );

		if ( 'em' === $padded_layout_padding['desktop-unit'] || 'em' === $padded_layout_padding['tablet-unit'] || 'em' === $padded_layout_padding['mobile-unit'] ) {
			$scroll_to_top_padded_padding = apply_filters( 'astra_scroll_top_padded_padding', 2 );
		}

		if ( '%' === $padded_layout_padding['desktop-unit'] || '%' === $padded_layout_padding['tablet-unit'] || '%' === $padded_layout_padding['mobile-unit'] ) {
			$scroll_to_top_padded_padding = apply_filters( 'astra_scroll_top_padded_padding', 4 );
		}

		$padded_spacing = array(
			/**
			 * Add spacing based on padded layout spacing
			 */
			'.ast-padded-layout .ast-scroll-to-top-' . $scroll_to_top_icon_alignment => array(
				$scroll_to_top_icon_alignment => astra_get_css_value( intval( $padded_layout_padding['desktop'][ $scroll_to_top_icon_alignment ] ) + $scroll_to_top_padded_padding, $padded_layout_padding['desktop-unit'] ),
				'bottom'                      => astra_get_css_value( intval( $padded_layout_padding['desktop']['bottom'] ) + $scroll_to_top_padded_padding, $padded_layout_padding['desktop-unit'] ),
			),
		);

		$tablet_padded_spacing = array(
			/**
			 * Add spacing based on padded layout spacing
			 */
			'.ast-padded-layout .ast-scroll-to-top-' . $scroll_to_top_icon_alignment => array(
				$scroll_to_top_icon_alignment => astra_get_css_value( intval( $padded_layout_padding['tablet'][ $scroll_to_top_icon_alignment ] ) + $scroll_to_top_padded_padding, $padded_layout_padding['tablet-unit'] ),
				'bottom'                      => astra_get_css_value( intval( $padded_layout_padding['tablet']['bottom'] ) + $scroll_to_top_padded_padding, $padded_layout_padding['tablet-unit'] ),
			),
		);

		$mobile_padded_spacing = array(
			/**
			 * Add spacing based on padded layout spacing
			 */
			'.ast-padded-layout .ast-scroll-to-top-' . $scroll_to_top_icon_alignment => array(
				$scroll_to_top_icon_alignment => astra_get_css_value( intval( $padded_layout_padding['mobile'][ $scroll_to_top_icon_alignment ] ) + $scroll_to_top_padded_padding, $padded_layout_padding['mobile-unit'] ),
				'bottom'                      => astra_get_css_value( intval( $padded_layout_padding['mobile']['bottom'] ) + $scroll_to_top_padded_padding, $padded_layout_padding['mobile-unit'] ),
			),
		);

		/* Parse CSS from array() */
		$parse_css .= astra_parse_css( $padded_spacing );
		$parse_css .= astra_parse_css( $tablet_padded_spacing, '', astra_addon_get_tablet_breakpoint() );
		$parse_css .= astra_parse_css( $mobile_padded_spacing, '', astra_addon_get_mobile_breakpoint() );
	endif;

	return $dynamic_css . $parse_css;

}
