<?php

if (! function_exists('woocommerce_mini_cart')) {
	return '';
}

if (
	! WC()->cart
	||
	! method_exists(WC()->cart, 'get_cart_contents_count')
) {
	return '';
}

if (! isset($device)) {
	$device = 'desktop';
}

if (isset($render_args['device'])) {
	$device = $render_args['device'];
}

$has_only_item = false;
$has_only_cart = false;
$has_only_totals = false;
$has_only_count = false;

if (blocksy_default_akg('has_empty_cart', $atts, 'no') === 'yes') {
	$attr['data-cart'] = 'hide-empty';
}

if (isset($render_args['only_item'])) {
	$has_only_item = $render_args['only_item'];
}

if (isset($render_args['only_cart'])) {
	$has_only_cart = $render_args['only_cart'];
}

if (isset($render_args['only_totals'])) {
	$has_only_totals = $render_args['only_totals'];
}

if (isset($render_args['only_count'])) {
	$has_only_count = $render_args['only_count'];
}

$has_badge = blocksy_default_akg('has_cart_badge', $atts, 'yes') === 'yes';

$icon = apply_filters('blocksy:header:cart:icons', [
	'type-1' => '<svg aria-hidden="true" width="15" height="15" viewBox="0 0 15 15"><path d="M14.1,1.6C14,0.7,13.3,0,12.4,0H2.7C1.7,0,1,0.7,0.9,1.6L0.1,13.1c0,0.5,0.1,1,0.5,1.3C0.9,14.8,1.3,15,1.8,15h11.4c0.5,0,0.9-0.2,1.3-0.6c0.3-0.4,0.5-0.8,0.5-1.3L14.1,1.6zM13.4,13.4c0,0-0.1,0.1-0.2,0.1H1.8c-0.1,0-0.2-0.1-0.2-0.1c0,0-0.1-0.1-0.1-0.2L2.4,1.7c0-0.1,0.1-0.2,0.2-0.2h9.7c0.1,0,0.2,0.1,0.2,0.2l0.8,11.5C13.4,13.3,13.4,13.4,13.4,13.4z M10,3.2C9.6,3.2,9.2,3.6,9.2,4v1.5c0,1-0.8,1.8-1.8,1.8S5.8,6.5,5.8,5.5V4c0-0.4-0.3-0.8-0.8-0.8S4.2,3.6,4.2,4v1.5c0,1.8,1.5,3.2,3.2,3.2s3.2-1.5,3.2-3.2V4C10.8,3.6,10.4,3.2,10,3.2z"/></svg>',

	'type-2' => '<svg aria-hidden="true" width="15" height="15" viewBox="0 0 15 15"><path d="M0.6,0.7C0.3,0.7,0,0.8,0,1.1s0.1,0.6,0.6,0.6l0,0h1c0.1,0,0.1,0.1,0.1,0.1L4.2,10c0.3,0.7,0.9,1.2,1.6,1.2H12c0.7,0,1.3-0.6,1.6-1.2L15,4.7c0.1-0.3-0.1-0.6-0.4-0.6h-0.1H3.6L2.8,1.7l0,0c0-0.7-0.6-1-1.2-1H0.6zM6.1,12.2c-0.6,0-1,0.6-1,1c0,0.4,0.6,1,1,1c0.4,0,1-0.6,1-1C7.2,12.8,6.7,12.2,6.1,12.2zM11.7,12.2c-0.6,0-1,0.6-1,1c0,0.4,0.6,1,1,1c0.6,0,1-0.6,1-1C12.7,12.8,12.3,12.2,11.7,12.2z"/></svg>',

	'type-3' => '<svg aria-hidden="true" width="15" height="15" viewBox="0 0 15 15"><path d="M4.5,1.1C3.9,1.1,3.4,1.4,3.1,2L1.7,5.9H0.6C0.5,5.9,0.1,6.1,0,6.2c0,0,0,0.3,0,0.5L1.7,13c0.1,0.6,0.8,0.9,1.3,0.9h8.9c0.6,0,1.2-0.5,1.4-0.9L15,6.7c0-0.2,0-0.5-0.2-0.6c0-0.1-0.3-0.1-0.4-0.1h-1.1l-1.6-4.1l0,0c-0.3-0.5-0.6-0.8-1.2-0.8H4.5zM4.5,2.5h5.9l1.5,3.5H3.1L4.5,2.5z M4.8,7.9c0.4,0,0.6,0.3,0.6,0.6v2.7c0,0.4-0.3,0.6-0.6,0.6c-0.3,0.2-0.6-0.3-0.6-0.6V8.6C4.1,8.2,4.4,7.9,4.8,7.9zM7.5,7.9c0.5,0,0.6,0.3,0.6,0.6v2.7c0,0.4-0.3,0.6-0.6,0.6c-0.5,0-0.6-0.3-0.6-0.6V8.6C6.9,8.2,7,7.9,7.5,7.9zM10.2,7.9c0.4,0,0.6,0.3,0.6,0.6v2.7c0,0.4-0.3,0.6-0.6,0.6c-0.5,0-0.6-0.3-0.6-0.6V8.6C9.6,8.2,9.9,7.9,10.2,7.9z"/></svg>',

	'type-4' => '<svg aria-hidden="true" width="15" height="15" viewBox="0 0 15 15"><path d="M11.2,3.5V1.8c0-1-0.8-1.8-1.8-1.8h-4c-1,0-1.8,0.8-1.8,1.8v1.8H0v9.8c0,1,0.8,1.8,1.8,1.8h11.5c1,0,1.8-0.8,1.8-1.8V3.5H11.2zM5.2,1.8c0-0.1,0.1-0.2,0.2-0.2h4c0.1,0,0.2,0.1,0.2,0.2v1.8H5.2V1.8z M13.5,13.2c0,0.1-0.1,0.2-0.2,0.2H1.8c-0.1,0-0.2-0.1-0.2-0.2V5h12V13.2zM5.5,8c0.4,0,0.8-0.3,0.8-0.8S5.9,6.5,5.5,6.5S4.8,6.8,4.8,7.2C4.8,7.7,5.1,8,5.5,8zM9.5,8c0.4,0,0.8-0.3,0.8-0.8S9.9,6.5,9.5,6.5S8.8,6.8,8.8,7.2C8.8,7.7,9.1,8,9.5,8z"/></svg>',

	'type-5' => '<svg aria-hidden="true" width="15" height="15" viewBox="0 0 15 15"><path d="M4.2,6.3c0-0.4,0.3-0.8,0.8-0.8s0.8,0.3,0.8,0.8c0,1,0.8,1.8,1.8,1.8s1.8-0.8,1.8-1.8c0-0.4,0.3-0.8,0.8-0.8s0.8,0.3,0.8,0.8c0,1.8-1.5,3.2-3.2,3.2S4.2,8.1,4.2,6.3zM14.2,3.6v9.7c0,1-0.8,1.7-1.8,1.7h-10c-1,0-1.8-0.8-1.8-1.7V3.6L3.1,0h8.8L14.2,3.6z M2.9,3h9.2l-1-1.5H3.9L2.9,3zM12.8,4.5H2.2v8.8c0,0.1,0.1,0.2,0.2,0.2h10c0.1,0,0.2-0.1,0.2-0.2V4.5z"/></svg>',

	'type-6' => '<svg aria-hidden="true" width="15" height="15" viewBox="0 0 15 15"><path d="M15,6.2c0-0.1,0-0.4-0.1-0.5c-0.3-0.5-0.8-0.5-1.1-0.5h-1.3L8.7,1.3C8.4,0.8,8,0.7,7.5,0.7S6.6,0.8,6.3,1.3L2.6,5.2H1.2c-0.3,0-0.8,0.2-0.9,0.4C0.2,5.8,0,6.1,0,6.4v0.9l0.9,5.1c0.2,1.2,1.2,1.9,2.2,1.9h8.6c1,0,2.1-0.9,2.2-1.9l0.9-5.1C14.9,7.3,15,6.2,15,6.2zM7,2c0.2-0.1,0.3-0.3,0.5-0.3s0.3,0,0.5,0.1L11,5H4.1C4.1,5,7,2,7,2z M4.4,11.6c-0.3,0-0.6-0.1-0.6-0.6L3.6,8.5c0-0.3,0.3-0.6,0.6-0.6s0.4,0.3,0.6,0.6L5,11.2C5,11.3,4.7,11.5,4.4,11.6z M8.1,11c0,0.3-0.3,0.6-0.6,0.6c-0.3,0-0.6-0.3-0.6-0.6V8.3c0-0.3,0.3-0.6,0.6-0.6c0.3,0,0.6,0.3,0.6,0.6C8.1,8.3,8.1,11,8.1,11z M11.4,8.5L11.1,11c0,0.3-0.3,0.6-0.6,0.6s-0.5-0.3-0.5-0.6l0.2-2.7c0-0.3,0.3-0.6,0.6-0.6C11.1,7.7,11.4,8,11.4,8.5C11.4,8.3,11.4,8.3,11.4,8.5z"/></svg>',
]);


$class = 'ct-header-cart';

$item_visibility = blocksy_default_akg('header_cart_visibility', $atts, [
	'tablet' => true,
	'mobile' => true,
]);

$class .= ' ' . blocksy_visibility_classes($item_visibility);

$has_cart_dropdown = blocksy_default_akg(
	'has_cart_dropdown',
	$atts,
	'yes'
) === 'yes';

$cart_drawer_type = blocksy_default_akg('cart_drawer_type', $atts, 'dropdown');

// Force dropdown drawer type if option is not visible.
if (
	$cart_drawer_type !== 'dropdown'
	&&
	apply_filters(
		'blocksy:header:cart:cart_drawer_type:option',
		'hidden'
	) === 'hidden'
) {
	$cart_drawer_type = 'dropdown';
}

$cart_total_class = 'ct-label';

$cart_subtotal_visibility = blocksy_default_akg(
	'cart_subtotal_visibility',
	$atts,
	[
		'desktop' => true,
		'tablet' => true,
		'mobile' => true,
	]
);

$cart_total_class .= ' ' . blocksy_visibility_classes($cart_subtotal_visibility);

$cart_total_position = blocksy_expand_responsive_value(
	blocksy_akg('cart_total_position', $atts, 'left')
);

$icon_type = blocksy_default_akg('mini_cart_type', $atts, 'type-1');

if (empty($icon_type)) {
	$icon_type = 'type-1';
}

$icon = $icon[$icon_type];
$icon_source = blocksy_default_akg('icon_source', $atts, 'default');

if ($icon_source === 'custom') {
	if (blocksy_manager()->companion->has('custom_icons')) {
		$icon = blocksy_manager()->companion->get_icon([
			'icon_descriptor' => blocksy_akg('icon', $atts, [
				'icon' => 'blc blc-cart'
			]),
			'icon_container' => false
		]);
	}
}

$item_class = 'ct-cart-item';

$url = wc_get_cart_url();

$auto_open_output = '';

if ($has_cart_dropdown && $cart_drawer_type === 'offcanvas') {
	$item_class .= ' ct-offcanvas-trigger';
	$url = '#woo-cart-panel';

	$auto_open_cart = blocksy_default_akg('auto_open_cart', $atts, [
		'archive' => false,
		'product' => false,
	]);

	$components = [];


	if ($auto_open_cart['archive']) {
		$components[] = 'archive';
	}

	if ($auto_open_cart['product']) {
		$components[] = 'product';
	}

	if (! empty($components)) {
		$auto_open_output = 'data-auto-open="' . implode(':', $components) . '"';
	}
}

$url = apply_filters('blocksy:header:cart:url', $url);

ob_start();

$count_output = '';
$current_count = 0;

if (WC()->cart && method_exists(WC()->cart, 'get_cart_contents_count')) {
	$current_count = WC()->cart->get_cart_contents_count();
}

$count_output = blocksy_html_tag(
	'span',
	[
		'class' => 'ct-dynamic-count-cart',
		'data-count' => $has_badge ? $current_count : 0,
	],
	$current_count
);

$totals_output = '';

$label_mask = blocksy_expand_responsive_value(
	blocksy_default_akg('cart_total_label', $atts, '{price}')
)[$device];

$label_parts = explode(
	'{price}',
	$label_mask
);

if (WC()->cart) {
	$totals_output = WC()->cart->get_cart_subtotal();

	$totals_output = blocksy_html_tag(
		'span',
		[
			'class' => 'ct-amount'
		],
		$totals_output
	);
}

$before_totals = isset($label_parts[0]) ? $label_parts[0] : '';
$after_totals = isset($label_parts[1]) ? $label_parts[1] : '';

$aria_label = __('Shopping cart', 'blocksy');

$label = $before_totals . $totals_output . $after_totals;

$label_visisbility = blocksy_default_akg(
	'cart_subtotal_visibility',
	$atts,
	[
		'desktop' => true,
		'tablet' => true,
		'mobile' => true,
	]
);

$has_visible_label = (
	(
		is_array($label_visisbility)
		&&
		(
			$label_visisbility['desktop'] !== false
			||
			$label_visisbility['tablet'] !== false
			||
			$label_visisbility['mobile'] !== false
		)
	)
	||
	(
		! is_array($label_visisbility)
		&&
		$label_visisbility
	)
);

if (
	(
		! empty($before_totals)
		||
		! empty($after_totals)
	)
	&&
	$has_visible_label
) {
	$aria_label = '';
}

$screen_reader_text = '';

if (! empty($aria_label)) {
	$screen_reader_text = blocksy_html_tag(
		'span',
		[ 'class' => 'screen-reader-text' ],
		$aria_label
	);
}

$icon_classes = [
	'ct-icon-container',
	blocksy_visibility_classes(
		blocksy_akg('cart_icon_visibility', $atts, [
			'desktop' => true,
			'tablet' => true,
			'mobile' => true,
		])
	)
];

?>

<a class="<?php echo $item_class ?>"
	href="<?php echo esc_attr($url) ?>"
	data-label="<?php echo $cart_total_position[$device] ?>"
	<?php echo $auto_open_output ?>>

	<?php
		echo $screen_reader_text;

		if ($has_visible_label) {
			echo blocksy_html_tag(
				'span',
				array_merge(
					[
						'class' => $cart_total_class,
						'data-price' => strpos($label_mask, '{price}') !== false ? 'yes' : 'no'
					],
				),
				$label
			);
		}
	?>

	<span class="<?php echo esc_attr(implode(' ', $icon_classes)) ?>" aria-hidden="true">
		<?php
			echo $count_output;

			/**
			 * Note to code reviewers: This line doesn't need to be escaped.
			 * The value used here escapes the value properly.
			 * It contains an inline SVG, which is safe.
			 */
			echo $icon;
		?>
	</span>
</a>

<?php

$item = ob_get_clean();

if ($has_only_item) {
	echo $item;
	return;
}

global $blocksy_mini_cart_ratio;
global $blocksy_mini_cart_size;

$blocksy_mini_cart_ratio = blocksy_default_akg('thumb_ratio', $atts, '1/1');
$blocksy_mini_cart_size = blocksy_default_akg(
	'image_size',
	$atts,
	'woocommerce_thumbnail'
);

ob_start();
if (isset($render_args['only_cart']) && $render_args['only_cart']) {
	woocommerce_mini_cart();
}
$content = ob_get_clean();

$blocksy_mini_cart_ratio = null;
$blocksy_mini_cart_size = null;

$cart_otput = blocksy_html_tag(
	'div',
	[
		'class' => 'ct-cart-content',
		'data-count' => $current_count
	],
	$content
);

if ($has_only_cart) {
	echo $cart_otput;
	return;
}

if ($has_only_totals) {
	echo $totals_output;
	return;
}

if ($has_only_count) {
	echo $count_output;
	return;
}

?>

<div
	class="<?php echo esc_attr(trim($class)) ?>"
	<?php echo blocksy_attr_to_html($attr) ?>>

	<?php
		echo $item;

		if ($has_cart_dropdown && $cart_drawer_type === 'dropdown') {
			echo $cart_otput;
		}
	?>
</div>
