<?php
//Igual no deberías poder abrirme
defined( 'ABSPATH' ) || exit;

/*
Inicia el medio de pago enCuotas
*/

//Añade compatibilidad con HPOS
add_action( 'before_woocommerce_init', function() {
    if ( class_exists( '\Automattic\WooCommerce\Utilities\FeaturesUtil' ) ) {
        \Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility( 'custom_order_tables', __FILE__, true );
    }
} );

//Añade compatibilidad con cart_checkout_blocks
add_action( 'before_woocommerce_init', function() {
    if ( class_exists( '\Automattic\WooCommerce\Utilities\FeaturesUtil' ) ) {
        \Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility( 'cart_checkout_blocks', __FILE__, true );
    }
} );

//Registra y encola los scripts necesarios
add_action( 'wp_enqueue_scripts', 'cetelem_cuotas_enqueue_scripts' );
function cetelem_cuotas_enqueue_scripts() {
    // Solo cargar en páginas relevantes
    if ( is_product() || is_checkout() || is_cart() ) {
        // Registrar el script principal de la calculadora
        wp_register_script( 
            'cetelem-cuotas-main', 
            plugin_dir_url( __FILE__ ) . '../assets/js/cetelem-cuotas.js', 
            array( 'jquery' ), 
            '1.0.0', 
            true 
        );
        
        // Registrar script para productos variables
        wp_register_script( 
            'cetelem-cuotas-variable', 
            plugin_dir_url( __FILE__ ) . '../assets/js/cetelem-variable.js', 
            array( 'jquery', 'cetelem-cuotas-main' ), 
            '1.0.0', 
            true 
        );
        
        // Registrar script para el formulario de pago
        wp_register_script( 
            'cetelem-payment-form', 
            plugin_dir_url( __FILE__ ) . '../assets/js/payment-form.js', 
            array( 'jquery' ), 
            '1.0.0', 
            true 
        );
        
        // Obtener configuración
        $configuracion = maybe_unserialize( get_option( 'woocommerce_cetelem_cuotas_settings' ) );
        
        if ( !empty( $configuracion ) && $configuracion['activar'] == 'yes' ) {
            wp_enqueue_script( 'cetelem-cuotas-main' );
            
            // Pasar datos de configuración a JavaScript
            wp_localize_script( 'cetelem-cuotas-main', 'cetelemConfig', array(
                'codcentro' => $configuracion['codcentro'],
                'server' => ( $configuracion['testing'] == 'no' ) ? 'https://www.cetelem.es' : 'https://test.cetelem.es',
                'ajaxurl' => admin_url( 'admin-ajax.php' ),
                'nonce' => wp_create_nonce( 'cetelem_nonce_action' )
            ));
            
            // Cargar script externo de Cetelem de forma dinámica
            add_action( 'wp_footer', 'cetelem_load_external_script' );
        }
    }
}

// Función para cargar el script externo de Cetelem
function cetelem_load_external_script() {
    $configuracion = maybe_unserialize( get_option( 'woocommerce_cetelem_cuotas_settings' ) );
    if ( !empty( $configuracion ) ) {
        $server = ( $configuracion['testing'] == 'no' ) ? 'https://ecommercecalculadora.cetelem.es' : 'https://test.cetelem.es';
        wp_enqueue_script( 
            'cetelem-external', 
            $server . '/eCommerceCalculadora/resources/js/mix/eCalculadoraCetelemMix.js', 
            array(), 
            null, 
            true 
        );
    }
}

//Añade soporte para el bloque del checkout
function cetelem_cuotas_gateway_blocks_support() {
    require_once plugin_dir_path( __FILE__ ) . 'class-cetelem-cuotas-gateway-blocks-support.php';

    add_action( 'woocommerce_blocks_payment_method_type_registration', function( Automattic\WooCommerce\Blocks\Payments\PaymentMethodRegistry $payment_method_registry ) {
            $payment_method_registry->register( new Cetelem_cuotas_Blocks() );
        }
    );
}
add_action( 'woocommerce_blocks_loaded', 'cetelem_cuotas_gateway_blocks_support' );

#[AllowDynamicProperties]
class Cetepaga_Cetelem_Cuotas extends WC_Payment_Gateway {
    /*
    Inicia lu construcción
    */
    public function __construct() {
        $this->id					= 'cetelem_cuotas';
        $this->icon 				= apply_filters( 'woocommerce_cetelem_cuotas_icon', plugins_url( '../assets/images/encuotas.png' , __FILE__ ) );
        $this->url					= 'https://ecommerce.cetelem.es/eCommerceLite/enCuotas/configuracion.htm';
        $this->url_test				= 'https://test.cetelem.es/eCommerceLite/enCuotas/configuracion.htm';
        $this->method_title			= esc_attr__( 'enCuotas', 'cetelem-payment' );
        $this->method_description	= esc_attr__( 'Pay with enCuotas', 'cetelem-payment' );
        $this->notify_url   		= WC()->api_request_url( 'Cetepaga_Cetelem_Cuotas' );
        $this->init();
    }

    /*
    Inicializa los datos
    */
    public function init() {	                
        //Carga los campos del formulario
        $this->init_form_fields();

        //Carga la configuración actual
        $this->init_settings();

        //Carga la configuración de Cetelem
        $configuracion              = maybe_unserialize( get_option( 'woocommerce_cetelem_settings' ) );
        
        //Define las variables
        $this->codcentro            = $this->settings[ 'codcentro' ];
        $this->custom_nif           = $this->settings[ 'custom_nif' ];
        $this->title                = $this->settings[ 'title' ];
        $this->description          = $this->settings[ 'description' ];
        $this->testing              = $this->settings[ 'testing' ];
        $this->importe              = ( isset( $this->settings[ 'importe' ] ) ) ? $this->settings[ 'importe' ] : 0;
        $this->activar              = $this->settings[ 'activar' ];;
        $this->mostrar              = $this->settings[ 'mostrar' ];;
        $this->method_title			= $this->title;
        $this->method_description	= $this->description;

        //Acciones
        add_action( 'woocommerce_receipt_cetelem_cuotas', [ $this, 'cetelem_cuotas_pedido' ] );
        if ( is_admin() ) {
            add_action( 'woocommerce_update_options_payment_gateways_' . $this->id, [ $this, 'process_admin_options' ] );
            add_action( 'woocommerce_update_options_payment_gateways_' . $this->id, [ $this, 'cetelem_cuotas_opciones' ] );
        }

        //Acción que gestiona la respuesta de Cetelem
        add_action( 'woocommerce_api_' . strtolower( get_class( $this ) ), [ $this, 'cetelem_cuotas_notificacion' ] );

        //Elimina Cetelem si el pedido es inferior al valor indicado en https://www.cetelem.es/addons/importe_enc.txt
        if ( ! is_admin() && ( is_checkout() || WC_Blocks_Utils::has_block_in_page( wc_get_page_id( 'checkout' ), 'woocommerce/checkout' ) ) ) {
            add_filter( 'woocommerce_available_payment_gateways', [ $this, 'cetelem_cuotas_filtra_medios_de_pago' ] );
        }
        
    }
    
    /*
    Genera el importe en las opciones
    */
    public function cetelem_cuotas_opciones() {
        $this->settings[ 'importe' ]    =  wp_remote_retrieve_body( wp_remote_get( 'https://www.cetelem.es/addons/importe_enc.txt' ) );
        update_option( 'woocommerce_cetelem_cuotas_settings', $this->settings );
		wp_clear_scheduled_hook( 'cetelem_cuotas_cron' );
		wp_schedule_event( time(), 'daily', 'cetelem_cuotas_cron' );
    }

    /*
    Formulario de configuración
    */
    public function admin_options() {
        include( 'formulario.php' );
    }

    /*
    Campos del formulario
    */
    public function init_form_fields() {    
        $this->form_fields = [
            'enabled' => [
                'title'			=> esc_attr__( 'Enable/Disable', 'cetelem-payment' ),
                'type'			=> 'checkbox',
                'label'			=> esc_attr__( 'Enable enCuotas', 'cetelem-payment' ),
                'default'		=> 'yes'
            ],
            'codcentro' => [
                'title'			=> esc_attr__( 'Commerce code', 'cetelem-payment' ),
                'type'			=> 'text',
                'description'	=> esc_attr__( 'The commerce code.', 'cetelem-payment' ),
                'default'		=> esc_attr__( 'Cetelem', 'cetelem-payment' ),
                'desc_tip' 		=>  true,
            ],
            'custom_nif' => [
                'title'			=> esc_attr__( 'Do you have a custom NIF/CIF field?', 'cetelem-payment' ),
                'type'			=> 'text',
                'description'	=> esc_attr__( "Name of your custom NIF/CIF field. Please leave blank if you don't have one.", 'cetelem-payment' ),
                'placeholder'	=> 'billing_vat',
                'desc_tip' 		=>  true,
            ],
            'title' => [
                'title'			=> esc_attr__( 'Title', 'cetelem-payment' ),
                'type'			=> 'text',
                'description'	=> esc_attr__( 'This controls the title which the user sees during checkout.', 'cetelem-payment' ),
                'default'		=> esc_attr__( 'Pay with enCuotas', 'cetelem-payment' ),
                'desc_tip' 		=>  true,
            ],
            'description' => [
                'title'			=> esc_attr__( 'Description', 'cetelem-payment' ),
                'type'			=> 'textarea',
                'description'	=> esc_attr__( 'This controls the description which the user sees during checkout.', 'cetelem-payment' ),
                'default'		=> esc_attr__( 'Immediate financing', 'cetelem-payment' ),
                'desc_tip' 		=>  true,
            ],
            'testing' => [
                'title'			=> esc_attr__( 'Testing mode', 'cetelem-payment' ),
                'type'			=> 'checkbox',
                'label'			=> esc_attr__( 'Enable testing mode', 'cetelem-payment' ),
                'description'	=> esc_attr__( 'Gateway in testing mode.', 'cetelem-payment' ),
                'default'		=> 'No'
            ],
            'activar'      => [
                'title'			=> esc_attr__( 'Enable/Disable', 'cetelem-payment' ),
                'label'         => esc_attr__( 'Enable or disable the calculator.', 'cetelem-payment' ),
                'description'	=> esc_attr__( 'Add <code>[calculator]</code> shortcode whatever you want to show our calculator.', 'cetelem-payment' ),
                'default' 		=> 'no',					
                'type'			=> 'checkbox',
            ],
            'mostrar'      => [
                'title'			=> esc_attr__( 'Where to show?', 'cetelem-payment' ),
                'description'	=> esc_attr__( 'Where you want to show the calculator.', 'cetelem-payment' ),
                'default' 		=> 'all',					
                'type'			=> 'select',
                'class'			=> 'wc-enhanced-select',
                'options'		=> [
                    'all'			=> esc_attr__( 'Both pages', 'cetelem-payment' ),
                    'product'		=> esc_attr__( 'Product page', 'cetelem-payment' ),
                    'checkout'		=> esc_attr__( 'Checkout page', 'cetelem-payment' )
                ],
                'desc_tip' 		=>  true,
            ],
        ];
    }

    /*
    Devuelve el número de pedido original al evitar fallos con números de pedido largos
    */
    public function cetelem_cuotas_recupera_numero_pedido( $numero_pedido ) {
        $real_order = get_transient( 'cetelem_cuotas_order_temp_' . $numero_pedido );

        if ( $real_order ) {
            return $real_order;
        } else {
            return ltrim( substr( $numero_pedido, 3 ), '0' );
        }
    }

    /*
    Prepara el número de pedido para evitar fallos con números de pedido largos
    */
    public function cetelem_cuotas_prepara_numero_pedido( $numero_pedido ) {
        $transaction_id     = str_pad( $numero_pedido, 6, '0', STR_PAD_LEFT );
        $aleatorio          = wp_rand( 1, 999 );
        $transaction_id2    = substr_replace( $transaction_id, $aleatorio, 0, -3 );
        set_transient( 'cetelem_cuotas_order_temp_' . $transaction_id2, $numero_pedido, 3600 );

        return $transaction_id2;
    }

    /*
    Genera los datos que se van a enviar a Cetelem
    */
    public function cetelem_cuotas_dame_datos( $pedido ) {
        //Obtiene el número de pedido
        $numero_pedido = method_exists( $pedido, 'get_id' ) ? $pedido->get_id() : $pedido->id;
		if ( 'yes' === get_option( 'wcj_order_number_sequential_enabled' ) && $pedido->get_meta( '_wcj_order_number', true ) ) { //Compatibilidad con Booster for WooCommerce
            $numero_pedido = $pedido->get_meta( '_wcj_order_number', true );
        }
        //Obtiene el número de pedido ajustado a 6 dígitos
        $albaran    = $this->cetelem_cuotas_prepara_numero_pedido( $numero_pedido );

        //Obtiene el NIF/CIF del cliente
        $nif        = ( ! empty( $this->custom_nif ) ) ? $pedido->get_meta( "_{$this->custom_nif}", true ) : $pedido->get_meta( "_billing_nif", true );

        //Comprueba si el teléfono introducido es fijo o móvil para generar un campo u otro
        $facturacion        = $pedido->get_address( 'billing' );
        $telefono           = ( preg_match( '/(9|8)[ 0-9 ]{8}/', preg_replace( '/\s+/', '', $facturacion[ "phone" ] ), $temporal ) ) ? 'Telefono1' : 'Telefono2';

        //Datos para Cetelem
        $datos_cetelem = [
            'COMANDO'				=> 'INICIO',	
            'Albaran'				=> substr( $numero_pedido, -13 ),
            'IdTransaccion'			=> substr( gmdate( "y" ), -1) . str_pad( gmdate( "z" ) + 1, 3, "0", STR_PAD_LEFT ) .$albaran,	
            'CodCentro'				=> $this->codcentro,	
            'Importe'				=> number_format( $pedido->get_total(), 2, ".", "" ) * 100,	
            'ReturnURL'				=> get_home_url() . "/cetelem-procesa-pedido?pedido=" . $numero_pedido,
            'ReturnOK'				=> $this->notify_url . "?pedido=" . $numero_pedido,
            'Nombre'				=> $facturacion[ "first_name" ],
            'Apellidos'				=> $facturacion[ "last_name" ],
            'NIF'					=> $nif,
            'Direccion'				=> preg_replace( "/[^a-zA-Z0-9àáâäãåacceèéêëeiìíîïlnòóôöõøùúûüuuÿýzzñçcšžÀÁÂÄÃÅACCEEÈÉÊËÌÍÎÏILNÒÓÔÖÕØÙÚÛÜUUŸÝZZÑßÇOEÆCŠŽ\s\-_\/.,']+/", "", preg_replace( "/º|ª/", "", $facturacion[ "address_1" ] . " " . $facturacion[ "address_2" ] ) ),
            'Localidad'				=> $facturacion[ "city" ],
            'CodigoPostalEnvio'		=> sprintf( "%05d", $facturacion[ "postcode" ] ),
            'Email'					=> $facturacion[ "email" ],
            $telefono				=> preg_replace( '/\s+/', '', $facturacion[ "phone" ] ),
        ];

        //Devuelve los datos y añade un filtro para futuras integraciones
        return apply_filters( 'woocommerces_cetelem_cuotas_data', $datos_cetelem, $pedido );
    }

    /*
    Procesa el pago y devuelve el resultado
    */
    public function process_payment( $numero_pedido ) {
        $pedido = wc_get_order( $numero_pedido );

        return [
            'result'	=> 'success',
            'redirect'	=> $pedido->get_checkout_payment_url( true )
        ];
    }
/*
Envía el pedido a Cetelem
*/
public function cetelem_cuotas_pedido( $numero_pedido ) {

    //Guarda una cookie con el número del pedido
    setcookie( 'cetelem', $numero_pedido, time() + 3600, COOKIEPATH, COOKIE_DOMAIN, false );

    //Muestra un mensaje en pantalla mientras terminamos el procesamiento del pedido
    echo '<p>' . esc_html__( 'Thank you for your order, please wait until redirecting you to Cetelem.', 'cetelem-payment' ) . '</p>';

    //Obtiene los datos que tenemos que enviar		
    $pedido         = wc_get_order( $numero_pedido );
    $datos_cetelem  = $this->cetelem_cuotas_dame_datos( $pedido );

    // Construir array seguro de inputs
    $inputs_array = [];
    foreach ( $datos_cetelem as $key => $value ) {
        $inputs_array[] = '<input type="hidden" name="' . esc_attr( $key ) . '" value="' . esc_attr( $value ) . '" />';
    }

    //Genera el formulario
    $url = ( $this->testing == 'no' ) ? $this->url : $this->url_test;

    echo '<form action="' . esc_url( $url ) . '" method="post" id="cetelem_payment_form" target="_top">';
    echo implode( "\n", $inputs_array ); // 🔹 Ahora se imprime de forma segura aquí
    echo '
        <!-- Botón -->
        <div class="payment_buttons">
            <input type="submit" class="button-alt" id="submit_cetelem_payment_form" value="' . esc_attr__( 'Pay with enCuotas', 'cetelem-payment' ) . '" /> 
            <a class="button cancel" href="' . esc_url( $pedido->get_cancel_order_url() ) . '">' . esc_attr__( 'Cancel order &amp; restore cart', 'cetelem-payment' ) . '</a>
        </div>
    </form>';

    // Encolar script para el formulario de pago
    wp_enqueue_script( 'cetelem-payment-form' );

    // Añadir script inline para el procesamiento del formulario
    $script = '
        jQuery(document).ready(function($) {
            $(".payment_buttons").hide();
            
            if ($.fn.block) {
                $("body").block({
                    message: "<img src=\"' . esc_url( apply_filters( 'woocommerce_cetelem_cuotas_icon', plugins_url( '../assets/images/encuotas.png' , __FILE__ ) ) ) . '\" alt=\"' . esc_attr__( 'Redirecting&hellip;', 'cetelem-payment' ) . '\" style=\"float:left; margin-right: 10px;\" />' . esc_attr__( 'Thank you for your order. We are now redirecting you to Cetelem to make payment.', 'cetelem-payment' ) . '",
                    overlayCSS: {
                        background: "#fff",
                        opacity: 0.6
                    },
                    css: {
                        padding: 20,
                        textAlign: "center",
                        color: "#555",
                        border: "3px solid #aaa",
                        backgroundColor: "#fff",
                        cursor: "wait",
                        lineHeight: "32px"
                    }
                });
            }
            
            $("#submit_cetelem_payment_form").click();
        });
    ';
    
    wp_add_inline_script( 'cetelem-payment-form', $script );
}

    /*
    Comprueba la respuesta de Cetelem
    */
    public function cetelem_cuotas_notificacion() {
        $ip = '';

        if ( isset($_SERVER['HTTP_CLIENT_IP']) && ! empty($_SERVER['HTTP_CLIENT_IP']) ) {
            $ip = sanitize_text_field( wp_unslash( $_SERVER['HTTP_CLIENT_IP'] ) );
        } elseif ( isset($_SERVER['HTTP_X_FORWARDED_FOR']) && ! empty($_SERVER['HTTP_X_FORWARDED_FOR']) ) {
            $ip = sanitize_text_field( wp_unslash( $_SERVER['HTTP_X_FORWARDED_FOR'] ) );
        } elseif ( isset($_SERVER['REMOTE_ADDR']) && ! empty($_SERVER['REMOTE_ADDR']) ) {
            $ip = sanitize_text_field( wp_unslash( $_SERVER['REMOTE_ADDR'] ) );
        }

        //¿Proxy?
        $ips    = explode( ',', $ip );
        //La respuesta no llega desde la IP prevista
        if ( $ip != '213.170.60.39' ) {
            if ( $ips[ 0 ] != '213.170.60.39' ) {
                exit();
            }
        }

        //Lee la cookie y obtenemos los datos del pedido
        $numero_pedido = 0;

        if (
            isset($_REQUEST['cetelem_nonce']) &&
            wp_verify_nonce(sanitize_text_field(wp_unslash($_REQUEST['cetelem_nonce'])), 'cetelem_nonce_action')
        ) {
            if ( isset( $_REQUEST['pedido'] ) ) {
                $numero_pedido = sanitize_text_field( wp_unslash( $_REQUEST['pedido'] ) );
            } elseif ( ! empty( $_REQUEST['IdTransaccion'] ) ) {
                $id_transaccion = sanitize_text_field( wp_unslash( $_REQUEST['IdTransaccion'] ) );
                $numero_pedido = (int) $this->cetelem_cuotas_recupera_numero_pedido( substr( $id_transaccion, -6 ) );
            } elseif ( isset( $_COOKIE['cetelem'] ) ) {
                $numero_pedido = sanitize_text_field( wp_unslash( $_COOKIE['cetelem'] ) );
            }

            $pedido = wc_get_order( $numero_pedido );
        } else {
            wp_die( esc_html__( 'Acceso no autorizado.', 'cetelem-payment' ) );
        }

        //Realiza algunas comprobaciones de seguridad
        $id_pedido = method_exists( $pedido, 'get_id' ) ? $pedido->get_id() : $pedido->id;
        if ( $id_pedido != $numero_pedido ) {
            exit();
        }
        if ( $pedido->get_status() == 'completed' ) {
            exit();
        }

        //Comprueba los datos enviados por Cetelem
        if ( ! empty( $_REQUEST[ 'codResultado' ] ) ) {
            //Guarda los detalles del pedido
            if ( ! empty( $_REQUEST['IdTransaccion'] ) ) {
                $id_transaccion = sanitize_text_field( wp_unslash( $_REQUEST['IdTransaccion'] ) );
                $pedido->update_meta_data( esc_attr__( 'Operation', 'cetelem-payment' ), $id_transaccion );
            }

            if ( ! empty( $_REQUEST['NSolicitud'] ) ) {
                $n_solicitud = sanitize_text_field( wp_unslash( $_REQUEST['NSolicitud'] ) );
                $pedido->update_meta_data( esc_attr__( 'Request', 'cetelem-payment' ), $n_solicitud );
            }

            if ( ! empty( $_REQUEST['codResultado'] ) ) {
                $cod_resultado = sanitize_text_field( wp_unslash( $_REQUEST['codResultado'] ) );
                $pedido->update_meta_data( esc_attr__( 'Answer', 'cetelem-payment' ), $cod_resultado );
            }

            //Comprueba el resultado de la operación
            if ( $_REQUEST[ 'codResultado' ] == "00" || $_REQUEST[ 'codResultado' ] == "50" ) {	//Preautorizada o Aprobada
                //Marca el pedido como Procesando
                if ( $_REQUEST[ 'codResultado' ] == "00" && ! $pedido->has_status( 'processing' ) ) {
                    $pedido->update_status( apply_filters( 'woocommerce_cetelem_cuotas_preauthorized', 'on-hold' ), esc_attr__( 'Operation preauthorized by Cetelem.', 'cetelem-payment' ) ); //Preautorizada
                } else {
                    $pedido->update_status( apply_filters( 'woocommerce_cetelem_cuotas_authorized', 'processing' ), esc_attr__( 'Operation authorized by Cetelem.', 'cetelem-payment' ) ); //Aprobada

                    //Reduce stock 
                    if ( version_compare( WOOCOMMERCE_VERSION, '3.0', '<' ) ) {
                        $pedido->reduce_order_stock();
                    } else {
                        wc_reduce_stock_levels( $numero_pedido );
                    }

                    //Vacía el carrito
                    WC()->cart->empty_cart();
                }

                //Envía al cliente a la página de gracias
                wp_redirect( $this->get_return_url( $pedido ) );
                die( 'Proceso completado con éxito.' );
            } else if ( $_REQUEST[ 'codResultado' ] == "99" || $_REQUEST[ 'codResultado' ] == "51" ) { //Rechazada
                if ( $_REQUEST[ 'codResultado' ] == "99" ) {
                    $pedido->update_status( apply_filters( 'woocommerce_cetelem_cuotas_99', 'failed' ), esc_attr__( 'Operation denied by Cetelem.', 'cetelem-payment' ) ); //Rechazada

                    //Vuelve a la página de pedido para volver a intentarlo
                    wp_redirect( $pedido->get_checkout_payment_url() );
                    die( 'Proceso completado sin éxito.' );
                } else {
                    $pedido->update_status( apply_filters( 'woocommerce_cetelem_cuotas_51', 'cancelled' ), esc_attr__( 'Operation denied by Cetelem.', 'cetelem-payment' ) ); //Rechazada

                    //Vuelve a la página de pedido para volver a intentarlo
                    wp_redirect( $pedido->get_view_order_url() );
                    die( 'Proceso completado sin éxito.' );
                }
            }
        }
        //Si ha llegado hasta aquí es porque el pedido ha terminado en Cetelem, pero no se han recibido los datos correctamente en la tienda del cliente, por lo tanto ha ocurrido algún tipo de fallo
        //Marca el pedido como Fallido
        $pedido->update_status( apply_filters( 'woocommerce_cetelem_cuotas_failed', 'failed' ), esc_attr__( 'Operation awaiting answer by Cetelem.', 'cetelem-payment' ) );

        //Vuelve a la página de carrito para volver a intentarlo
        wp_redirect( get_permalink( wc_get_page_id( 'cart' ) ) );
        die( 'Proceso completado sin éxito.' );
    }

    /*
	Elimina enCuotas para pedidos inferiores al importe mínimo 
    */
    public function cetelem_cuotas_filtra_medios_de_pago( $medios ) {
        global $cetelem;
        
        $total  = ( is_null( WC()->cart ) ) ? 0 : ( float ) WC()->cart->total;

        if ( ( float ) $total < $cetelem[ 'encuotas' ] || $total > $this->importe ) {
            unset( $medios[ 'cetelem_cuotas' ] );
        }

        return $medios;
    }

    /*
    Añade la calculadora en la descripción
    */
public function payment_fields() {
    global $cetelem;

    echo wp_kses_post( wpautop( wptexturize( $this->get_description() ) ) );

    if (
        $this->activar === 'yes' &&
        $this->mostrar !== 'product' &&
        (float) WC()->cart->total >= $cetelem['encuotas'] &&
        (float) WC()->cart->total <= $this->importe
    ) {
        wc_get_template(
            'calculadora-encuotas-descripcion.php',
            [ 'total' => (float) WC()->cart->total ],
            '',
            plugin_dir_path( __FILE__ )
        );
    }
}

}
/*
Recompone los nombres de las secciones
*/
function cetelem_cuotas_secciones( $secciones ) {
    //Retrocompatibilidad con versiones anteriores a 2.6
    $seccion  = ( version_compare( WOOCOMMERCE_VERSION, '2.6', '<' ) ) ? 'Cetepaga_Cetelem_Cuotas' : 'cetelem_cuotas';
    $opciones = maybe_unserialize( get_option( 'woocommerce_cetelem_cuotas_settings' ) );
    
    //Es la primera vez que se ejecuta el plugin. Inicializa datos
    if ( ! isset( $opciones[ 'title' ] ) ) {
        $opciones[ 'title' ] = ( isset( $secciones[ $seccion ] ) ) ? $secciones[ $seccion ] : esc_attr__( 'Pay with enCuotas', 'cetelem-payment' );
    }

    return $secciones;
}
add_filter( 'woocommerce_get_sections_checkout', 'cetelem_cuotas_secciones' );

/*
Añade el nuevo medio de pago
*/
function cetelem_cuotas_anade_pago( $metodos ) {
    $metodos[] = 'Cetepaga_Cetelem_Cuotas';

    return $metodos;
}
add_filter( 'woocommerce_payment_gateways', 'cetelem_cuotas_anade_pago', 10 );

/*
Actualiza el importe mínimo a financiar
*/
function cetelem_cuotas_actualiza_importe( $dame_importe = false ) {
    $importe                = wp_remote_retrieve_body( wp_remote_get( 'https://www.cetelem.es/addons/importe_enc.txt' ) );
    if ( $dame_importe ) {
        return $importe;
    }
    $opciones               = maybe_unserialize( get_option( 'woocommerce_cetelem_cuotas_settings' ) );
    $opciones[ 'importe' ]  = $importe;
    update_option( 'woocommerce_cetelem_cuotas_settings', $opciones );    
}
add_action( 'cetelem_cuotas_cron', 'cetelem_cuotas_actualiza_importe' );

/*
Recarga la calculadora en los productos variables
*/
function cetelem_cuotas_calculadora_variable() {
    // Verificar nonce
    if ( !isset($_REQUEST['cetelem_nonce']) || !wp_verify_nonce(sanitize_text_field(wp_unslash($_REQUEST['cetelem_nonce'])), 'cetelem_nonce_action') ) {
        wp_die( esc_html__( 'Acceso no autorizado.', 'cetelem-payment' ) );
    }

    $variation_id = 0;
    if ( isset($_REQUEST['variation_id']) ) {
        $variation_id = absint( wp_unslash( $_REQUEST['variation_id'] ) );
    }

    $product = new WC_Product_Factory();
    $precio = ( version_compare( WOOCOMMERCE_VERSION, '2.7', '<' ) )
        ? get_product( $variation_id )->get_price_including_tax()
        : wc_get_price_including_tax( $product->get_product( $variation_id ) );

    //Recoge los datos de configuración
    $configuracion = maybe_unserialize( get_option( 'woocommerce_cetelem_cuotas_settings' ) );
    if ( ! empty( $configuracion ) ) {
        // Registrar script inline para la calculadora variable
        wp_register_script( 'cetelem-variable-calc', '', array( 'jquery' ), '1.0.0', true );
        wp_enqueue_script( 'cetelem-variable-calc' );
        
        $script = '
            codCentro = "' . esc_js( $configuracion['codcentro'] ) . '";
            cantidad = "' . esc_js( round( $precio, 2 ) ) . '";
            server = "' . ( ( $configuracion['testing'] == 'no' ) ? 'https://www.cetelem.es' : 'https://test.cetelem.es' ) . '";
        ';
        
        wp_add_inline_script( 'cetelem-variable-calc', $script );
        
        // Cargar script externo de Cetelem
        wp_enqueue_script( 
            'cetelem-external-calc', 
            ( ( $configuracion['testing'] == 'no' ) ? 'https://ecommercecalculadora.cetelem.es' : 'https://test.cetelem.es' ) . '/eCommerceCalculadora/resources/js/mix/eCalculadoraCetelemMix.js', 
            array(), 
            '3.2.0', 
            true 
        );
    }
    
    wp_die(); // Terminar la ejecución AJAX correctamente
}
add_action( 'wp_ajax_nopriv_cetelem_cuotas_calculadora_variable', 'cetelem_cuotas_calculadora_variable' );
add_action( 'wp_ajax_cetelem_cuotas_calculadora_variable', 'cetelem_cuotas_calculadora_variable' );

/*
Pinta la calculadora
*/
function cetelem_cuotas_pinta_calculadora( $precio, $variable ) {
    //Recoge los datos de configuración
    $configuracion  = maybe_unserialize( get_option( 'woocommerce_cetelem_cuotas_settings' ) );
    if ( ! empty( $configuracion ) && $configuracion[ 'activar' ] == 'yes' ) {
        ob_start();
        
        echo '<div id="eCalculadoraCetelemEnCuotas"></div>';
        
        // Registrar script para la calculadora
        wp_register_script( 'cetelem-calculator', '', array( 'jquery' ), '1.0.0', true );
        wp_enqueue_script( 'cetelem-calculator' );
        
        // Script base para la calculadora
        $script = '
            window.codCentro = "' . esc_js( $configuracion['codcentro'] ) . '";
            window.cantidad = "' . esc_js( round( $precio, 2 ) ) . '";
            window.server = "' . ( ( $configuracion['testing'] == 'no' ) ? 'https://ecommercecalculadora.cetelem.es' : 'https://test.cetelem.es' ) . '";
            
            // Cargar script externo dinámicamente
            (function(){
                var s = document.createElement("script");
                s.src = window.server + "/eCommerceCalculadora/resources/js/mix/eCalculadoraCetelemMix.js";
                s.async = false;
                document.head.appendChild(s);
            })();
        ';
        
        // Si es producto variable, añadir manejo de variaciones
        if ( $variable ) {
            $script .= '
                jQuery(document).ready(function($) {
                    $(".variations_form").on("show_variation", function(event, variation) {
                        $.ajax({
                            type: "POST",
                            url: "' . esc_js( admin_url( 'admin-ajax.php' ) ) . '",
                            data: {
                                "action": "cetelem_cuotas_calculadora_variable",
                                "variation_id": variation.variation_id,
                                "cetelem_nonce": "' . esc_js( wp_create_nonce( 'cetelem_nonce_action' ) ) . '"
                            },
                            success: function(response) {
                                $("#eCalculadoraCetelemEnCuotas").html("");
                                $("#cetelem_calculadora").html(response);
                            }
                        });
                    });
                });
            ';
            echo '<div id="cetelem_calculadora" style="display: none;"></div>';
        }
        
        wp_add_inline_script( 'cetelem-calculator', $script );
        
        return ob_get_clean();
    }
    return ''; // No hay datos
}