<?php
/**
 * UTM tracking and external link functions for SeedProd Admin
 *
 * All functions must use seedprod_pro_ prefix (renamed to seedprod_lite_ in build)
 *
 * @package    SeedProd
 * @subpackage SeedProd/admin/includes
 */

// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

/**
 * Get support/documentation link with UTM parameters
 *
 * @param string $path     Optional path to append to base URL.
 * @param string $source   UTM source (default: 'WordPress').
 * @param string $medium   UTM medium context.
 * @param string $campaign UTM campaign (default: 'proplugin' or 'liteplugin').
 * @return string Full URL with UTM parameters.
 */
function seedprod_pro_get_support_link( $path = '', $source = 'WordPress', $medium = 'admin-header', $campaign = '' ) {
	// For Lite version, redirect support links to WordPress.org forums.
	if ( function_exists( 'seedprod_pro_v2_is_lite_view' ) && seedprod_pro_v2_is_lite_view() ) {
		return 'https://wordpress.org/support/plugin/coming-soon/';
	}

	$base_url = 'https://www.seedprod.com/docs/';

	// Add path if provided.
	if ( ! empty( $path ) ) {
		$base_url .= ltrim( $path, '/' );
	}

	// Determine campaign based on build.
	if ( empty( $campaign ) ) {
		$is_lite_view = seedprod_pro_v2_is_lite_view();
		$campaign     = ! $is_lite_view ? 'proplugin' : 'liteplugin';
	}

	// Get referrer if exists.
	$referrer    = '';
	$referred_by = get_option( 'seedprod_referred_by' );
	if ( ! empty( $referred_by ) ) {
		$source .= '-' . $referred_by;
	}

	// Build UTM parameters.
	$utm_params = array(
		'utm_source'   => sanitize_key( $source ),
		'utm_medium'   => sanitize_key( $medium ),
		'utm_campaign' => sanitize_key( $campaign ),
	);

	// Add version for tracking.
	$utm_params['utm_content'] = SEEDPROD_PRO_VERSION;

	// Apply filter for customization.
	$utm_params = apply_filters( 'seedprod_pro_admin_utm_params', $utm_params, $path, $medium );

	return add_query_arg( $utm_params, $base_url );
}

/**
 * Get upgrade link with UTM parameters (Lite only)
 *
 * @param string $medium   UTM medium context.
 * @param string $campaign UTM campaign.
 * @return string Full upgrade URL with UTM parameters.
 */
function seedprod_pro_get_upgrade_link( $medium = 'admin-header', $campaign = 'liteplugin' ) {
	$base_url = 'https://www.seedprod.com/lite-upgrade/';

	// Get referrer if exists.
	$source      = 'WordPress';
	$referred_by = get_option( 'seedprod_referred_by' );
	if ( ! empty( $referred_by ) ) {
		$source .= '-' . $referred_by;
	}

	// Build UTM parameters.
	$utm_params = array(
		'utm_source'   => sanitize_key( $source ),
		'utm_medium'   => sanitize_key( $medium ),
		'utm_campaign' => sanitize_key( $campaign ),
	);

	// Apply filter for customization.
	$utm_params = apply_filters( 'seedprod_pro_upgrade_utm_params', $utm_params, $medium );

	return add_query_arg( $utm_params, $base_url );
}

/**
 * Get pricing/purchase link with UTM parameters
 *
 * @param string $medium   UTM medium context.
 * @param string $campaign UTM campaign.
 * @return string Full pricing URL with UTM parameters.
 */
function seedprod_pro_get_pricing_link( $medium = 'settings-license', $campaign = 'proplugin' ) {
	$base_url = 'https://www.seedprod.com/pricing/';

	// Get referrer if exists.
	$source      = 'WordPress';
	$referred_by = get_option( 'seedprod_referred_by' );
	if ( ! empty( $referred_by ) ) {
		$source .= '-' . $referred_by;
	}

	// Build UTM parameters.
	$utm_params = array(
		'utm_source'   => sanitize_key( $source ),
		'utm_medium'   => sanitize_key( $medium ),
		'utm_campaign' => sanitize_key( $campaign ),
	);

	// Apply filter for customization.
	$utm_params = apply_filters( 'seedprod_pro_pricing_utm_params', $utm_params, $medium );

	return add_query_arg( $utm_params, $base_url );
}

/**
 * Get external link with UTM parameters
 *
 * @param string $url      Base URL.
 * @param string $medium   UTM medium context.
 * @param string $campaign UTM campaign.
 * @param string $source   UTM source.
 * @return string Full URL with UTM parameters.
 */
function seedprod_pro_get_external_link( $url, $medium = '', $campaign = '', $source = 'WordPress' ) {
	// If no UTM params needed, return URL as is.
	if ( empty( $medium ) && empty( $campaign ) ) {
		return $url;
	}

	// Determine campaign based on build if not provided.
	if ( empty( $campaign ) ) {
		$is_lite_view = seedprod_pro_v2_is_lite_view();
		$campaign     = ! $is_lite_view ? 'proplugin' : 'liteplugin';
	}

	// Build UTM parameters.
	$utm_params = array();

	if ( ! empty( $source ) ) {
		$utm_params['utm_source'] = sanitize_key( $source );
	}

	if ( ! empty( $medium ) ) {
		$utm_params['utm_medium'] = sanitize_key( $medium );
	}

	if ( ! empty( $campaign ) ) {
		$utm_params['utm_campaign'] = sanitize_key( $campaign );
	}

	// Apply filter for customization.
	$utm_params = apply_filters( 'seedprod_pro_external_utm_params', $utm_params, $url, $medium );

	return add_query_arg( $utm_params, $url );
}
