<?php
declare( strict_types = 1 );
namespace Automattic\WooCommerce\EmailEditor\Integrations\Core\Renderer\Blocks;
if (!defined('ABSPATH')) exit;
use Automattic\WooCommerce\EmailEditor\Engine\Renderer\ContentRenderer\Rendering_Context;
use Automattic\WooCommerce\EmailEditor\Integrations\Utils\Dom_Document_Helper;
use Automattic\WooCommerce\EmailEditor\Integrations\Utils\Styles_Helper;
use Automattic\WooCommerce\EmailEditor\Integrations\Utils\Table_Wrapper_Helper;
class Column extends Abstract_Block_Renderer {
 protected function add_spacer( $content, $email_attrs ): string {
 return $content;
 }
 protected function render_content( string $block_content, array $parsed_block, Rendering_Context $rendering_context ): string {
 return str_replace(
 '{column_content}',
 $this->get_inner_content( $block_content ),
 $this->get_block_wrapper( $block_content, $parsed_block, $rendering_context )
 );
 }
 private function get_block_wrapper( string $block_content, array $parsed_block, Rendering_Context $rendering_context ): string {
 $original_wrapper_classname = ( new Dom_Document_Helper( $block_content ) )->get_attribute_value_by_tag_name( 'div', 'class' ) ?? '';
 $block_attributes = wp_parse_args(
 $parsed_block['attrs'] ?? array(),
 array(
 'verticalAlignment' => 'stretch',
 'width' => $rendering_context->get_layout_width_without_padding(),
 'style' => array(),
 )
 );
 // The default column alignment is `stretch to fill` which means that we need to set the background color to the main cell
 // to create a feeling of a stretched column. This also needs to apply to CSS classnames which can also apply styles.
 $is_stretched = empty( $block_attributes['verticalAlignment'] ) || 'stretch' === $block_attributes['verticalAlignment'];
 $padding_styles = Styles_Helper::get_block_styles( $block_attributes, $rendering_context, array( 'padding' ) );
 $padding_styles = Styles_Helper::extend_block_styles( $padding_styles, array( 'text-align' => $rendering_context->get_default_text_align() ) );
 $cell_styles = Styles_Helper::get_block_styles( $block_attributes, $rendering_context, array( 'border', 'background', 'background-color', 'color' ) );
 $cell_styles = Styles_Helper::extend_block_styles(
 $cell_styles,
 array_filter(
 array(
 'background-size' => ! empty( $cell_styles['background-image'] ) && empty( $cell_styles['background-size'] ) ? 'cover' : null,
 )
 )
 );
 $wrapper_classname = 'block wp-block-column email-block-column';
 $content_classname = 'email-block-column-content';
 $wrapper_styles = Styles_Helper::extend_block_styles(
 Styles_Helper::$empty_block_styles,
 array( 'vertical-align' => $is_stretched ? 'top' : $block_attributes['verticalAlignment'] ),
 );
 $content_styles = Styles_Helper::extend_block_styles( Styles_Helper::$empty_block_styles, array( 'vertical-align' => 'top' ) );
 if ( $is_stretched ) {
 $wrapper_classname .= ' ' . $original_wrapper_classname;
 $wrapper_styles = Styles_Helper::extend_block_styles( $wrapper_styles, $cell_styles['declarations'] );
 } else {
 $content_classname .= ' ' . $original_wrapper_classname;
 $content_styles = Styles_Helper::extend_block_styles( $content_styles, $cell_styles['declarations'] );
 }
 // Create the inner table using the helper.
 $inner_table_attrs = array(
 'class' => $content_classname,
 'style' => $content_styles['css'],
 'width' => '100%',
 );
 $inner_cell_attrs = array(
 'align' => $rendering_context->get_default_text_align(),
 'style' => $padding_styles['css'],
 );
 $inner_table = Table_Wrapper_Helper::render_table_wrapper( '{column_content}', $inner_table_attrs, $inner_cell_attrs );
 // Apply physical side padding from email_attrs (set by Spacing_Preprocessor for columns blockGap).
 $gap_padding_side = $rendering_context->get_start_side();
 $gap_padding_value = $parsed_block['email_attrs'][ 'padding-' . $gap_padding_side ] ?? null;
 if ( $gap_padding_value ) {
 $gap_padding_styles = wp_style_engine_get_styles( array( 'spacing' => array( 'padding' => array( $gap_padding_side => $gap_padding_value ) ) ) );
 $wrapper_styles = Styles_Helper::extend_block_styles( $wrapper_styles, $gap_padding_styles['declarations'] ?? array() );
 }
 // Create the outer td element (since this is meant to be used within a columns structure).
 $wrapper_cell_attrs = array(
 'class' => $wrapper_classname,
 'style' => $wrapper_styles['css'],
 'width' => Styles_Helper::parse_value( $block_attributes['width'] ),
 );
 return Table_Wrapper_Helper::render_table_cell( $inner_table, $wrapper_cell_attrs );
 }
}
