<?php

namespace CTXFeed\V5\CustomFields;

use CTXFeed\V5\Compatibility\WCMLCurrency;
use CTXFeed\V5\Helper\CustomFieldHelper;
use CTXFeed\V5\Utility\Settings;

/**
 * Class InputCustomFiled
 *
 * @package    CTXFeed
 * @subpackage CTXFeed\V5\CustomField
 */
class InputCustomFiled implements CustomFieldInterface {
	public function __construct() {
		add_action( 'woocommerce_product_options_inventory_product_data', [ $this, 'set_custom_field' ], 10, 3 );
		add_action( 'woocommerce_product_after_variable_attributes', [
			$this,
			'set_custom_field_for_variation'
		], 10, 3 );
		add_action( 'save_post_product', [ $this, 'save_custom_field_value' ], 10, 2 );
		add_action( 'woocommerce_save_product_variation', [ $this, 'save_variation_custom_field_value' ], 10, 2 );
	}

	/**
	 * Set Custom Fields for Product.
	 *
	 * @return void
	 */
	public function set_custom_field() {

		$custom_field_settings = Settings::get( 'woo_feed_identifier' );

		$custom_fields         = CustomFieldHelper::get_fields();

		if ( ! empty( $custom_field_settings ) && in_array( 'enable', $custom_field_settings, true ) ) {
			echo '<div class="options_group">';
			echo sprintf( '<h4 class="%s" style="padding-left: 10px;color: black;">%s</h4>', esc_attr( 'woo-feed-option-title' ), esc_html__( 'CUSTOM FIELDS by CTX Feed', 'woo-feed' ) );
			foreach ( $custom_fields as $field_Key => $custom_field ) {
				if ( isset( $custom_field_settings[ $field_Key ] ) && 'enable' === $custom_field_settings[ $field_Key ] && 'text' === $custom_field[2] ) {

					//identifier meta value for old and new version users
					$custom_field_key_previous   = sprintf( 'woo_feed_identifier_%s', strtolower( $field_Key ) );
					$custom_field_value_previous = get_post_meta( get_the_ID(), $custom_field_key_previous, true );

					$custom_field_key   = sprintf( 'woo_feed_%s', strtolower( $field_Key ) );
					$custom_field_value = get_post_meta( get_the_ID(), $custom_field_key, true );

					if( empty( $custom_field_value ) && is_plugin_active( 'woocommerce-multilingual/wpml-woocommerce.php' )){
						$originalId = apply_filters('woo_feed_original_post_id',  get_the_ID() );
						$custom_field_value = get_post_meta( $originalId, $custom_field_key, true );
					}

					if ( empty( $custom_field_value ) && ! empty( $custom_field_value_previous ) ) {
						$custom_field_key   = $custom_field_key_previous;
						$custom_field_value = $custom_field_value_previous;
					}

					$custom_field_id          = esc_attr( wp_unslash( "woo_feed_$field_Key" ) );
					$custom_field_label       = esc_attr( wp_unslash( $custom_field[0] ) );
					$custom_field_description = __( 'Set product ', 'woo-feed' ) . esc_html( $custom_field_label ) . __( ' here.', 'woo-feed' );

					woocommerce_wp_text_input(
						array(
							'id'          => $custom_field_id,
							'label'       => $custom_field_label,
							'placeholder' => $custom_field_label,
							'desc_tip'    => true,
							'value'       => esc_attr( wp_unslash( $custom_field_value ) ),
							'description' => $custom_field_description,
						)
					);
				}
			}
			echo '</div>';
		}
	}

	/**
	 * Set Custom Fields for Product Variations.
	 *
	 * @param $loop
	 * @param $variation_data
	 * @param $variation
	 *
	 * @return void
	 */
	public function set_custom_field_for_variation( $loop, $variation_data, $variation ) {

		$custom_field_settings = Settings::get( 'woo_feed_identifier' );
		$custom_fields         = CustomFieldHelper::get_fields();

		if ( ! empty( $custom_field_settings ) && in_array( 'enable', $custom_field_settings, true ) ) {
			echo '<div class="woo-feed-variation-options">';

			if ( ! empty( $custom_fields ) ) {
				echo '<div class="woo-feed-variation-options">';
				echo "<hr>";
				echo sprintf( '<h4 class="%s">%s</h4>', esc_attr( 'woo-feed-variation-option-title' ), esc_html__( 'CUSTOM FIELDS by CTX Feed', 'woo-feed' ) );
				echo "<hr>";
				echo '<div class="woo-feed-variation-items">';

				foreach ( $custom_fields as $field_Key => $custom_field ) {
					if ( isset( $custom_field_settings[ $field_Key ] ) && 'enable' === $custom_field_settings[ $field_Key ] && 'text' === $custom_field[2] ) {
						$custom_field_id          = sprintf( 'woo_feed_%s_var[%d]', strtolower( $field_Key ), $variation->ID );
						$custom_field_label       = isset( $custom_field[0] ) ? $custom_field[0] : '';
						$custom_field_description = sprintf( 'Set Variation %s here.', $custom_field_label );

						//identifier meta value for old and new version users
						if ( metadata_exists( 'post', $variation->ID, 'woo_feed_' . strtolower( $field_Key ) . '_var' ) ) {
							$custom_field_key = sprintf( 'woo_feed_%s_var', strtolower( $field_Key ) );
						} else {
							$custom_field_key = sprintf( 'woo_feed_identifier_%s_var', strtolower( $field_Key ) );
						}

						woocommerce_wp_text_input(
							array(
								'id'            => $custom_field_id,
								'value'         => esc_attr( get_post_meta( $variation->ID, $custom_field_key, true ) ),
								'placeholder'   => esc_html( $custom_field_label ),
								'label'         => esc_html( $custom_field_label ),
								'desc_tip'      => true,
								'description'   => esc_html( $custom_field_description ),
								'wrapper_class' => 'form-row form-row-full',
							)
						);
					}
				}
				echo '</div></div>';
			}
			echo "<hr>";
			echo '</div>';
		}
	}

	/**
	 * Save Product Custom Field Value.
	 *
	 * @param int $post_id Product id.
	 *
	 * @return void
	 */
	public function save_custom_field_value( $post_id ) {
		$custom_fields = CustomFieldHelper::get_fields();
		$set_meta_val  = '';

		if ( ! empty( $custom_fields ) ) {
			foreach ( $custom_fields as $key => $custom_field ) {
				$product_meta_key = "woo_feed_$key";

				$new_meta_key = "woo_feed_identifier_$key";
				$new_meta_val = get_post_meta( $post_id, $new_meta_key, true );
				$old_meta_val = get_post_meta( $post_id, $product_meta_key, true );

				if ( ! empty( $old_meta_val ) ) {
					$set_meta_val = $old_meta_val;
				} else {
					$set_meta_val = $new_meta_val;
				}

				if ( isset( $_POST[ $product_meta_key ] ) ) {
					$product_meta_value = sanitize_text_field( $_POST[ $product_meta_key ] );
				} elseif ( isset( $_POST[ $new_meta_key ] ) ) {
					$product_meta_value = sanitize_text_field( $_POST[ $new_meta_key ] );
				} else {
					$product_meta_value = $set_meta_val;
				}

				if ( isset( $product_meta_value ) && ! empty( $product_meta_value ) ) {
					update_post_meta( $post_id, $product_meta_key, $product_meta_value );
				} else {
					delete_post_meta( $post_id, $product_meta_key );
				}
			}
		}
	}

	/**
	 * Save Product Variation Custom Field Value.
	 *
	 * @param int $post_id Variation id.
	 *
	 * @return void
	 */
	public function save_variation_custom_field_value( $post_id) {
		$custom_fields            = woo_feed_product_custom_fields();

		if ( ! empty( $custom_fields ) ) {
			foreach ( $custom_fields as $key => $value ) {

				$product_meta_key = "woo_feed_{$key}_var";

				$new_meta_key = "woo_feed_identifier_{$key}_var";
				$new_meta_val = get_post_meta( $post_id, $new_meta_key, true );
				$old_meta_val = get_post_meta( $post_id, $product_meta_key, true );

				if ( ! empty( $old_meta_val ) ) {
					$set_meta_val = $old_meta_val;
				} else {
					$set_meta_val = $new_meta_val;
				}

				if ( isset( $_POST[ $product_meta_key ][ $post_id ] ) ) {
					$product_meta_value = sanitize_text_field( $_POST[ $product_meta_key ][ $post_id ] );
				} elseif ( isset( $_POST[ $new_meta_key ] [ $post_id ] ) ) {
					$product_meta_value = sanitize_text_field( $_POST[ $new_meta_key ][ $post_id ] );
				} else {
					$product_meta_value = $set_meta_val;
				}


				if ( isset( $product_meta_value ) && ! empty( $product_meta_value ) ) {
					update_post_meta( $post_id, $product_meta_key, $product_meta_value );
				}else {
					delete_post_meta( $post_id, $product_meta_key );
				}
			}
		}
	}
}
