<?php
/**
 * Wishlist helper functions.
 */

use XTS\WC_Wishlist\Ui;
use XTS\WC_Wishlist\Wishlist;

if ( ! function_exists( 'woodmart_get_wishlist_page_url' ) ) {
	/**
	 * Get wishlist page url.
	 *
	 * @since 1.0
	 *
	 * @return string
	 */
	function woodmart_get_wishlist_page_url() {
		$page_id = woodmart_get_opt( 'wishlist_page' );

		if ( defined( 'ICL_SITEPRESS_VERSION' ) && function_exists( 'wpml_object_id_filter' ) ) {
			$page_id = wpml_object_id_filter( $page_id, 'page', true );
		}

		if ( empty( $page_id ) && 'page' === get_post_type( $page_id ) ) {
			return '';
		}

		return get_permalink( $page_id );
	}
}

if ( ! function_exists( 'woodmart_get_wishlist_count' ) ) {
	/**
	 * Get wishlist count.
	 *
	 * @since 1.0
	 *
	 * @return integer
	 */
	function woodmart_get_wishlist_count() {
		$count = 0;
		$ui    = Ui::get_instance();

		if ( $ui->get_wishlist() ) {
			$count = $ui->get_wishlist()->get_count();
		}

		return $count;
	}
}

if ( ! function_exists( 'woodmart_get_wishlist_groups' ) ) {
	/**
	 * Get wishlist groups user.
	 *
	 * @return array
	 */
	function woodmart_get_wishlist_groups() {
		if ( ! woodmart_get_opt( 'wishlist_expanded' ) || ! is_user_logged_in() ) {
			return array();
		}

		global $wpdb;

		$wishlist = new Wishlist();
		$list     = array();

		$cache = get_user_meta( $wishlist->get_user_id(), 'woodmart_wishlist_groups', true );

		if ( ! $cache ) {
			$wishlist_groups = $wpdb->get_results( // phpcs:ignore.
				$wpdb->prepare(
					"	SELECT ID, wishlist_group
					FROM {$wpdb->prefix}woodmart_wishlists
					WHERE user_id = %d
					",
					$wishlist->get_user_id()
				),
				ARRAY_A
			);

			if ( $wishlist_groups ) {
				foreach ( $wishlist_groups as $wishlist_group ) {
					$list[ $wishlist_group['ID'] ] = $wishlist_group['wishlist_group'];
				}
			}

			update_user_meta( $wishlist->get_user_id(), 'woodmart_wishlist_groups', $list );
		} else {
			$list = (array) $cache;
		}

		return $list;
	}
}

if ( ! function_exists( 'woodmart_get_unsubscribe_link' ) ) {
	/**
	 * Get unsubscribe link by user ID.
	 *
	 * @param integer $user_id User ID.
	 *
	 * @return string
	 */
	function woodmart_get_unsubscribe_link( $user_id ) {
		$unsubscribe_token            = get_user_meta( $user_id, 'woodmart_send_wishlist_unsubscribe_token', true );
		$unsubscribe_token_expiration = get_user_meta( $user_id, 'woodmart_send_wishlist_unsubscribe_token_expiration', true );

		if ( ! $unsubscribe_token || ! $unsubscribe_token_expiration || $unsubscribe_token_expiration < time() ) {
			$unsubscribe_token            = wp_generate_password( 24, false );
			$unsubscribe_token_expiration = apply_filters( 'woodmart_send_wishlist_unsubscribe_token_expiration', time() + MONTH_IN_SECONDS, $unsubscribe_token );

			update_user_meta( $user_id, 'woodmart_send_wishlist_unsubscribe_token', $unsubscribe_token );
			update_user_meta( $user_id, 'woodmart_send_wishlist_unsubscribe_token_expiration', $unsubscribe_token_expiration );
		}

		return apply_filters( 'woodmart_send_wishlist_unsubscribe_url', add_query_arg( 'unsubscribe_send_wishlist_product', $unsubscribe_token, get_permalink( wc_get_page_id( 'shop' ) ) ), $user_id, $unsubscribe_token, $unsubscribe_token_expiration );
	}
}

if ( ! function_exists( 'woodmart_check_this_email_notification_is_enabled' ) ) {
	/**
	 * Check this email notification is enabled in woocommerce.
	 *
	 * @param string $option        Name option.
	 * @param string $default_value Default option value. If the $option is not saved in the database, then $default_value will be taken.
	 *
	 * @return bool
	 */
	function woodmart_check_this_email_notification_is_enabled( $option, $default_value = 'no' ) {
		$settings   = get_option( $option, array() );
		$option_val = ! isset( $settings['enabled'] ) ? $default_value : $settings['enabled'];

		return 'yes' === $option_val || ( isset( $_GET['page'] ) && 'digthis-woocommerce-preview-emails' === $_GET['page'] ); // phpcs:ignore. WordPress.Security.NonceVerification.Recommended
	}
}
