<?php
/**
 * WooCommerce hooks: wrappers, ATC copy, fragments, personalization.
 *
 * @package Foliora
 */

if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

/**
 * Never bounce shoppers to the cart page after add-to-cart.
 */
add_filter( 'woocommerce_add_to_cart_redirect', '__return_empty_string', 99 );
add_filter( 'option_woocommerce_cart_redirect_after_add', function () {
	return 'no';
} );

/**
 * Button label.
 *
 * @return string
 */
function foliora_atc_text() {
	return 'Add to Bag';
}
add_filter( 'woocommerce_product_single_add_to_cart_text', 'foliora_atc_text' );
add_filter( 'woocommerce_product_add_to_cart_text', 'foliora_atc_text' );

/**
 * Drop WooCommerce layout floats (48% gallery / 22% product cards).
 *
 * @param array $styles Style handles.
 * @return array
 */
function foliora_dequeue_woo_layout( $styles ) {
	unset( $styles['woocommerce-layout'] );
	return $styles;
}
add_filter( 'woocommerce_enqueue_styles', 'foliora_dequeue_woo_layout' );

/**
 * Wrapper open.
 */
function foliora_wc_wrapper_open() {
	echo '<div class="foliora-wc wrap">';
}
add_action( 'woocommerce_before_main_content', 'foliora_wc_wrapper_open', 5 );

/**
 * Wrapper close.
 */
function foliora_wc_wrapper_close() {
	echo '</div>';
}
add_action( 'woocommerce_after_main_content', 'foliora_wc_wrapper_close', 50 );

remove_action( 'woocommerce_before_main_content', 'woocommerce_output_content_wrapper', 10 );
remove_action( 'woocommerce_after_main_content', 'woocommerce_output_content_wrapper_end', 10 );
remove_action( 'woocommerce_before_single_product_summary', 'woocommerce_show_product_images', 20 );
remove_action( 'woocommerce_before_single_product_summary', 'woocommerce_show_product_sale_flash', 10 );
remove_action( 'woocommerce_after_single_product_summary', 'woocommerce_output_product_data_tabs', 10 );
remove_action( 'woocommerce_after_single_product_summary', 'woocommerce_upsell_display', 15 );
remove_action( 'woocommerce_after_single_product_summary', 'woocommerce_output_related_products', 20 );

/**
 * Remove default Woo tabs (copy lives in the custom PDP).
 */
function foliora_remove_product_tabs( $tabs ) {
	return array();
}
add_filter( 'woocommerce_product_tabs', 'foliora_remove_product_tabs', 98 );

/**
 * Personalization field inside the add-to-cart form.
 */
function foliora_personalize_field() {
	global $product;
	if ( ! $product || 'FOL-EMB-001' !== $product->get_sku() ) {
		return;
	}
	?>
	<p class="pdp__personalize pdp__personalize--in-form">
		<label for="foliora_personalize_field">Name or short line</label>
		<input id="foliora_personalize_field" type="text" name="foliora_personalize" maxlength="40" placeholder="Your name" data-personalize-input>
		<span class="fine" data-personalize-echo>Preview your personalization before ordering</span>
	</p>
	<?php
}
add_action( 'woocommerce_before_add_to_cart_button', 'foliora_personalize_field' );

/**
 * Save embosser personalization onto the cart item.
 *
 * @param array $cart_item_data Existing data.
 * @return array
 */
function foliora_add_personalize_data( $cart_item_data ) {
	if ( empty( $_REQUEST['foliora_personalize'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
		return $cart_item_data;
	}
	$line = sanitize_text_field( wp_unslash( $_REQUEST['foliora_personalize'] ) ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended
	if ( $line ) {
		$cart_item_data['foliora_personalize'] = $line;
		$cart_item_data['unique_key']          = md5( $line . microtime() );
	}
	return $cart_item_data;
}
add_filter( 'woocommerce_add_cart_item_data', 'foliora_add_personalize_data' );

/**
 * Show personalization in cart.
 *
 * @param array $item_data Display rows.
 * @param array $cart_item Cart item.
 * @return array
 */
function foliora_display_personalize( $item_data, $cart_item ) {
	if ( ! empty( $cart_item['foliora_personalize'] ) ) {
		$item_data[] = array(
			'key'   => 'Personalization',
			'value' => $cart_item['foliora_personalize'],
		);
	}
	return $item_data;
}
add_filter( 'woocommerce_get_item_data', 'foliora_display_personalize', 10, 2 );

/**
 * Persist personalization to the order item.
 *
 * @param WC_Order_Item_Product $item          Item.
 * @param string                $cart_item_key Key.
 * @param array                 $values        Values.
 */
function foliora_checkout_personalize( $item, $cart_item_key, $values ) {
	if ( ! empty( $values['foliora_personalize'] ) ) {
		$item->add_meta_data( 'Personalization', $values['foliora_personalize'] );
	}
}
add_action( 'woocommerce_checkout_create_order_line_item', 'foliora_checkout_personalize', 10, 3 );

/**
 * Fragments: drawer + badge.
 *
 * @param array $fragments Fragments.
 * @return array
 */
function foliora_cart_fragments( $fragments ) {
	ob_start();
	get_template_part( 'template-parts/cart-drawer' );
	$fragments['div.foliora-cart-drawer'] = ob_get_clean();

	$count = foliora_cart_count();
	$fragments['span.cart-count'] = '<span class="cart-count"' . ( $count ? '' : ' hidden' ) . '>' . esc_html( (string) $count ) . '</span>';

	return $fragments;
}
add_filter( 'woocommerce_add_to_cart_fragments', 'foliora_cart_fragments' );

/**
 * Hover image URL for a product card.
 *
 * @param WC_Product $product Product.
 * @return string
 */
function foliora_hover_image_url( $product ) {
	$id = (int) $product->get_meta( '_foliora_hover_image' );
	if ( $id ) {
		$url = wp_get_attachment_image_url( $id, 'foliora-card' );
		if ( $url ) {
			return $url;
		}
	}
	$copy = foliora_copy_for_product( $product );
	if ( ! empty( $copy['hover'] ) ) {
		return foliora_image_uri( $copy['hover'] );
	}
	return '';
}

/**
 * Filter shop by mood query string.
 *
 * @param WP_Query $q Query.
 */
function foliora_mood_pre_get_posts( $q ) {
	if ( is_admin() || ! $q->is_main_query() || ! isset( $_GET['mood'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
		return;
	}
	if ( ! function_exists( 'is_shop' ) || ! is_shop() ) {
		return;
	}
	$mood = sanitize_key( wp_unslash( $_GET['mood'] ) ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended
	$map  = array(
		'cozy'    => array( 'FOL-LGT-001', 'FOL-SLV-VIN', 'FOL-BMK-MAG' ),
		'fantasy' => array( 'FOL-EMB-001', 'FOL-BMK-MAG', 'FOL-LGT-001' ),
		'weekend' => array( 'FOL-SLV-VIN', 'FOL-STD-001', 'FOL-JRN-001' ),
		'study'   => array( 'FOL-ANN-KIT', 'FOL-JRN-001', 'FOL-STD-001', 'FOL-LGT-001' ),
	);
	if ( ! isset( $map[ $mood ] ) ) {
		return;
	}
	$ids = array();
	foreach ( $map[ $mood ] as $sku ) {
		$id = wc_get_product_id_by_sku( $sku );
		if ( $id ) {
			$ids[] = $id;
		}
	}
	if ( $ids ) {
		$q->set( 'post__in', $ids );
		$q->set( 'orderby', 'post__in' );
	}
}
add_action( 'pre_get_posts', 'foliora_mood_pre_get_posts' );

/**
 * Featured / fallback image URI for a product.
 *
 * @param WC_Product $product Product.
 * @return string
 */
function foliora_product_card_image( $product ) {
	$id = $product->get_image_id();
	if ( $id ) {
		$url = wp_get_attachment_image_url( $id, 'foliora-card' );
		if ( $url ) {
			return $url;
		}
	}
	$copy = foliora_copy_for_product( $product );
	return foliora_image_uri( $copy['image'] );
}
