<?php
/**
 * Cross-sell map by SKU.
 *
 * @package Foliora
 */

if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

/**
 * SKU → suggested add-on SKUs.
 *
 * @return array<string, string[]>
 */
function foliora_crosssell_map() {
	return array(
		'FOL-SLV-VIN' => array( 'FOL-BMK-MAG', 'FOL-LGT-001' ),
		'FOL-EMB-001' => array( 'FOL-SLV-VIN', 'FOL-BMK-MAG' ),
		'FOL-LGT-001' => array( 'FOL-SLV-VIN', 'FOL-BMK-MAG' ),
		'FOL-ANN-KIT' => array( 'FOL-JRN-001', 'FOL-BMK-MAG' ),
		'FOL-JRN-001' => array( 'FOL-ANN-KIT' ),
		'FOL-BMK-MAG' => array( 'FOL-SLV-VIN' ),
		'FOL-STD-001' => array( 'FOL-LGT-001' ),
		'FOL-GFT-SET' => array( 'FOL-EMB-001' ),
	);
}

/**
 * Cart-drawer add-on SKUs.
 *
 * @return string[]
 */
function foliora_drawer_addon_skus() {
	return array( 'FOL-BMK-MAG', 'FOL-ANN-KIT' );
}

/**
 * Resolve a parent SKU for variations (FOL-SLV-VIN-BUR-PB → FOL-SLV-VIN).
 *
 * @param string $sku SKU.
 * @return string
 */
function foliora_parent_sku( $sku ) {
	$map = foliora_crosssell_map();
	if ( isset( $map[ $sku ] ) ) {
		return $sku;
	}
	foreach ( array_keys( $map ) as $prefix ) {
		if ( 0 === strpos( $sku, $prefix ) ) {
			return $prefix;
		}
	}
	return $sku;
}

/**
 * Suggested products for a SKU.
 *
 * @param string $sku SKU.
 * @return WC_Product[]
 */
function foliora_crosssell_products( $sku ) {
	if ( ! function_exists( 'wc_get_product_id_by_sku' ) ) {
		return array();
	}

	$key  = foliora_parent_sku( $sku );
	$map  = foliora_crosssell_map();
	$skus = isset( $map[ $key ] ) ? $map[ $key ] : array();
	$out  = array();

	foreach ( $skus as $addon_sku ) {
		$id = wc_get_product_id_by_sku( $addon_sku );
		if ( ! $id ) {
			continue;
		}
		$product = wc_get_product( $id );
		if ( $product && $product->is_purchasable() ) {
			$out[] = $product;
		}
	}

	return $out;
}

/**
 * Price of a product plus mapped add-ons.
 *
 * @param WC_Product   $product Product.
 * @param WC_Product[] $addons  Add-ons.
 * @return float
 */
function foliora_setup_total( $product, $addons ) {
	$total = (float) $product->get_price();
	foreach ( $addons as $addon ) {
		$total += (float) $addon->get_price();
	}
	return $total;
}
