<?php
if ( ! defined( 'ABSPATH' ) ) { exit; }

class KNSDD_Ajax_Promos {
    public function __construct() {
        add_action( 'wp_ajax_knsdd_get_product_promo', array( $this, 'get_product_promo' ) );
        add_action( 'wp_ajax_nopriv_knsdd_get_product_promo', array( $this, 'get_product_promo' ) );
    }

    public function get_product_promo() {
        // CDN/Proxy cache'i baypas etmek için güçlü no-cache header'ları gönder
        if ( ! headers_sent() ) {
            nocache_headers();
            header( 'Cache-Control: no-store, no-cache, must-revalidate, max-age=0' );
            header( 'Cache-Control: post-check=0, pre-check=0', false );
            header( 'Pragma: no-cache' );
            header( 'Expires: Wed, 11 Jan 1984 05:00:00 GMT' );
        }
        // Nonce kontrolü
        $nonce = isset( $_POST['nonce'] ) ? sanitize_text_field( wp_unslash( $_POST['nonce'] ) ) : '';
        if ( ! wp_verify_nonce( $nonce, 'knsdd_promo' ) ) {
            wp_send_json_error( array( 'code' => 'bad_nonce' ), 403 );
        }

        // Global pasif durumdaysa herhangi bir promosyon mesajı göstermeyelim
        if ( class_exists('KNSDD_Data') && method_exists('KNSDD_Data','is_globally_enabled') ) {
            if ( ! KNSDD_Data::is_globally_enabled() ) {
                wp_send_json_success( array( 'html' => '' ) );
            }
        }

        $product_id = isset( $_POST['product_id'] ) ? intval( $_POST['product_id'] ) : 0;
        if ( $product_id <= 0 ) {
            wp_send_json_success( array( 'html' => '' ) );
        }

        // Kurala göre mesajı hazırla
        $rule = KNSDD_Discount_Engine::get_first_rule_for_product( $product_id );
        if ( ! $rule ) {
            wp_send_json_success( array( 'html' => '' ) );
        }
        
        // BOGO kampanyası için özel mesaj seçimi
        if ( isset($rule['campaign_type']) && $rule['campaign_type'] === 'buy_x_get_y_discount' ) {
            $msg_data = $this->resolve_bogo_message( $product_id, $rule );
        } else {
            // Standart kampanyalar
            $msg_data = isset($rule['messages']['product']) ? $rule['messages']['product'] : null;
        }
        
        if ( ! $msg_data || empty( $msg_data['show'] ) || empty( $msg_data['text'] ) ) {
            wp_send_json_success( array( 'html' => '' ) );
        }

        $message = array(
            'text'      => $msg_data['text'],
            'color'     => isset( $msg_data['color'] ) ? $msg_data['color'] : '',
            'highlight' => ! empty( $msg_data['highlight'] ),
            'icon'      => array(
                'enabled'  => ! empty( $msg_data['icon']['enabled'] ),
                'pack'     => isset( $msg_data['icon']['pack'] ) ? $msg_data['icon']['pack'] : '',
                'value'    => isset( $msg_data['icon']['value'] ) ? $msg_data['icon']['value'] : '',
                'color'    => isset( $msg_data['icon']['color'] ) ? $msg_data['icon']['color'] : '',
                'position' => isset( $msg_data['icon']['position'] ) ? $msg_data['icon']['position'] : 'before',
                'size'     => isset( $msg_data['icon']['size'] ) ? $msg_data['icon']['size'] : 'md',
            ),
        );

        // Renderer ile HTML üret
        ob_start();
        if ( class_exists( 'KNSDD_Icon_Renderer' ) && class_exists( 'KNSDD_Message_Renderer' ) ) {
            $icon_renderer = new KNSDD_Icon_Renderer();
            $renderer = new KNSDD_Message_Renderer( $icon_renderer );
            $renderer->render_messages( array( $message ) );
        } else {
            // Basit fallback
            $classes = array( 'knsdd-message-item' );
            if ( ! empty( $message['highlight'] ) ) { $classes[] = 'is-bold'; }
            $style = '';
            if ( ! empty( $message['color'] ) ) { $style .= 'color:' . esc_attr( $message['color'] ) . ';'; }
            echo '<div class="' . esc_attr( implode( ' ', $classes ) ) . '" style="' . esc_attr( $style ) . '">';
            echo esc_html( $message['text'] );
            echo '</div>';
        }
        $html = ob_get_clean();

        wp_send_json_success( array( 'html' => $html ) );
    }
    
    /**
     * BOGO kampanyası için doğru mesajı seç (Hedef Öncelikli)
     * 
     * @param int $product_id Ürün ID
     * @param array $rule Kural verisi
     * @return array|null Mesaj verisi veya null
     */
    private function resolve_bogo_message( $product_id, $rule ) {
        // Önce discount engine'den gelen rol bilgisini kontrol et (performans için)
        if ( isset($rule['_bogo_role']) && is_array($rule['_bogo_role']) ) {
            $is_trigger = !empty($rule['_bogo_role']['is_trigger']);
            $is_target = !empty($rule['_bogo_role']['is_target']);
        } else {
            // Fallback: Manuel hesaplama (eski davranış)
            $trigger_products = isset($rule['trigger_products']) ? (array) $rule['trigger_products'] : array();
            $trigger_category = isset($rule['trigger_category']) ? absint($rule['trigger_category']) : 0;
            $target_products = isset($rule['target_products']) ? (array) $rule['target_products'] : array();
            $target_category = isset($rule['target_category']) ? absint($rule['target_category']) : 0;
            
            $is_trigger = false;
            $is_target = false;
            
            // Ürün kontrolü
            if ( ! empty( $trigger_products ) && in_array( $product_id, $trigger_products, true ) ) {
                $is_trigger = true;
            }
            if ( ! empty( $target_products ) && in_array( $product_id, $target_products, true ) ) {
                $is_target = true;
            }
            
            // Hiyerarşik kategori kontrolü (sadece gerekirse, tek seferde)
            if ( ! $is_trigger || ! $is_target ) {
                if ( ( ! $is_trigger && $trigger_category ) || ( ! $is_target && $target_category ) ) {
                    $product_cats = wc_get_product_term_ids( $product_id, 'product_cat' );
                    if ( ! empty( $product_cats ) ) {
                        // Kategori ağacını genişlet (üst kategorileri dahil et)
                        $expanded_product_cats = array_map( 'intval', $product_cats );
                        foreach ( $product_cats as $cat_id ) {
                            $ancestors = get_ancestors( (int) $cat_id, 'product_cat', 'taxonomy' );
                            if ( ! empty( $ancestors ) ) {
                                $expanded_product_cats = array_merge( $expanded_product_cats, array_map( 'intval', $ancestors ) );
                            }
                        }
                        $expanded_product_cats = array_unique( $expanded_product_cats );
                        
                        // Trigger kategori kontrolü
                        if ( ! $is_trigger && $trigger_category ) {
                            $is_trigger = in_array( $trigger_category, $expanded_product_cats, true );
                        }
                        // Target kategori kontrolü
                        if ( ! $is_target && $target_category ) {
                            $is_target = in_array( $target_category, $expanded_product_cats, true );
                        }
                    }
                }
            }
        }
        
        // Mesaj seçim mantığı (Tetikleyici Öncelikli)
        // Eğer ürün hem tetikleyici hem hedef ise, tetikleyici mesajı göster
        if ( $is_trigger && !empty($rule['messages']['product_trigger']) ) {
            return $rule['messages']['product_trigger'];
        } elseif ( $is_target && !empty($rule['messages']['product_target']) ) {
            return $rule['messages']['product_target'];
        }
        
        // Fallback: Standart mesaj
        return isset($rule['messages']['product']) ? $rule['messages']['product'] : null;
    }
}
