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

/**
 * KNSDD_Tracker Class
 *
 * Sipariş tamamlandığında indirim kuralı kullanımlarını takip eder ve kaydeder.
 */
class KNSDD_Tracker {

    public function __construct() {
        // Bir siparişin durumu ödeme alındığında/işlemde/tamamlandığında sayaçları artır.
        add_action( 'woocommerce_payment_complete', array( $this, 'record_usage_on_completion' ), 10, 1 );
        add_action( 'woocommerce_order_status_processing', array( $this, 'record_usage_on_completion' ), 10, 1 );
        add_action( 'woocommerce_order_status_completed', array( $this, 'record_usage_on_completion' ), 10, 1 );
        // Bazı ödeme yöntemleri siparişi on-hold durumuna alır; bu durumda da kayıt alalım
        add_action( 'woocommerce_order_status_on-hold', array( $this, 'record_usage_on_completion' ), 10, 1 );
        // Daha erken aşamalarda da kayıt alınması için kapsamı genişlet
        add_action( 'woocommerce_order_status_pending', array( $this, 'record_usage_on_completion' ), 10, 1 );
        add_action( 'woocommerce_checkout_order_processed', array( $this, 'record_usage_on_completion' ), 10, 1 );
        // İade/iptal/başarısız telafi kayıtları
        add_action( 'woocommerce_order_refunded', array( $this, 'record_refund_adjustments' ), 10, 2 );
        add_action( 'woocommerce_order_status_cancelled', array( $this, 'record_cancel_reversal' ), 10, 1 );
        add_action( 'woocommerce_order_status_failed', array( $this, 'record_failed_reversal' ), 10, 1 );
        // State transition reversal: Geçersiz durumdan geçerli duruma geçişte negatif kayıtları geri al
        add_action( 'woocommerce_order_status_changed', array( $this, 'handle_status_transition_reversal' ), 10, 4 );
        add_action( 'wp_trash_post', array( $this, 'handle_order_deletion' ), 10, 1 );
        add_action( 'before_delete_post', array( $this, 'handle_order_deletion' ), 10, 1 );
        add_action( 'delete_post', array( $this, 'handle_order_deletion' ), 10, 1 );
        // WooCommerce specific hooks
        add_action( 'woocommerce_before_delete_order', array( $this, 'handle_wc_order_deletion' ), 10, 1 );
        add_action( 'woocommerce_trash_order', array( $this, 'handle_wc_order_deletion' ), 10, 1 );
        // Thankyou sayfasında tarayıcı çerezi koyarak misafir tekrarını da engelle
        add_action( 'woocommerce_thankyou', array( $this, 'mark_rules_used_cookie' ), 10, 1 );
    }

    /**
     * Sipariş tamamlandığında indirim kullanımını kaydeder.
     *
     * @param int $order_id Sipariş ID'si.
     */
    public function record_usage_on_completion( $order_id ) {
        $order = wc_get_order( $order_id );

        if ( ! $order ) {
            return;
        }

        // Tekrarlı hook çağrılarını önle - daha önce kaydedilmiş mi kontrol et
        if ( $this->is_usage_already_recorded( $order_id ) ) {
            return;
        }

        // Sadece geçerli sipariş durumlarını kaydet
        $status = $order->get_status();
        $valid_statuses = array( 'processing', 'completed', 'on-hold' );
        if ( ! in_array( $status, $valid_statuses, true ) ) {
            return;
        }

        // Kayıt atmadan önce tablo şemasının mevcut olduğundan emin ol
        if ( class_exists( 'KNSDD_Database' ) && method_exists( 'KNSDD_Database', 'maybe_create_usage_log_table' ) ) {
            KNSDD_Database::maybe_create_usage_log_table();
        }

        global $wpdb;
        $table = $wpdb->prefix . 'knsdd_usage_log';

        // Müşteri e-postasını belirle (login/guest fark etmeksizin)
        $customer_email = '';
        $uid = $order->get_customer_id();
        if ( $uid ) {
            $user = get_user_by( 'id', (int) $uid );
            if ( $user && ! empty( $user->user_email ) ) {
                $customer_email = sanitize_email( $user->user_email );
            }
        }
        if ( empty( $customer_email ) ) {
            $customer_email = sanitize_email( $order->get_billing_email() );
        }

        // Siparişteki ücret (fee) satırlarını kontrol et.
        foreach ( $order->get_items( 'fee' ) as $item ) {
            // İndirim kuralı ID'sinin meta olarak kaydedilip kaydedilmediğini kontrol et.
            $rule_id = $item->get_meta( '_knsdd_rule_id', true );
            $group_name = $item->get_meta( '_knsdd_group', true );

            if ( ! empty( $rule_id ) ) {
                $customer_id = $order->get_customer_id();
                
                // İstatistik log kaydı
                $currency = $order->get_currency();
                $discount_amount = 0;
                // Bu fee kalemi negatif bir indirim tutarıdır
                $fee_total = (float) $item->get_total();
                if ( $fee_total < 0 ) {
                    $discount_amount = abs( $fee_total );
                }
                if ( empty( $group_name ) ) { $group_name = ''; }
                
                // Sipariş toplam tutarı (KDV hariç)
                $order_total = (float) $order->get_total() - (float) $order->get_total_tax();

                // Idempotent kontrol: aynı order_item_id için kayıt var mı?
                $order_item_id = (int) $item->get_id();
                $like = '%"order_item_id":' . $order_item_id . '%';
                $already = $wpdb->get_var( $wpdb->prepare(
                    "SELECT id FROM {$table} WHERE order_id = %d AND rule_id = %s AND meta LIKE %s",
                    $order_id, $rule_id, $like
                ) );
                if ( ! $already ) {
                    $meta_json = wp_json_encode( array(
                        'type' => 'fee',
                        'order_item_id' => $order_item_id,
                        'email' => $customer_email,
                    ) );
                    $wpdb->insert( $table, array(
                        'order_id'        => $order_id,
                        'customer_id'     => (int) $customer_id,
                        'customer_email'  => $customer_email,
                        'rule_id'         => $rule_id,
                        'group_name'      => $group_name,
                        'discount_amount' => $discount_amount,
                        'order_total'     => $order_total,
                        'currency'        => $currency,
                        'created_at'      => gmdate( 'Y-m-d H:i:s' ),
                        'meta'            => $meta_json,
                    ) );
    
                    // Kural seçim önbelleğini kır
                    update_option( 'knsdd_cache_version', time() );
                }

                // increment_rule_usage fonksiyonu artık kullanılmıyor, bu yüzden buradan çağrıyı kaldırdık.
                // Log kaydı atmak, sayımın kendisi haline geldi.
            }
        }

        // Line item (ürün satırı) indirimlerini kontrol et.
        foreach ( $order->get_items( 'line_item' ) as $item ) {
            $rule_id      = $item->get_meta( '_knsdd_rule_id', true );
            $group_name   = $item->get_meta( '_knsdd_group', true );
            $line_discount = $item->get_meta( '_knsdd_line_discount', true );

            if ( empty( $rule_id ) ) { continue; }
            $discount_amount = (float) $line_discount;
            if ( $discount_amount <= 0 ) { continue; }

            $customer_id = $order->get_customer_id();
            $currency    = $order->get_currency();
            if ( empty( $group_name ) ) { $group_name = ''; }
            
            // Sipariş toplam tutarı (KDV hariç)
            $order_total = (float) $order->get_total() - (float) $order->get_total_tax();

            // Idempotent kontrol: aynı order_item_id için kayıt var mı?
            $order_item_id = (int) $item->get_id();
            $like = '%"order_item_id":' . $order_item_id . '%';
            $already = $wpdb->get_var( $wpdb->prepare(
                "SELECT id FROM {$table} WHERE order_id = %d AND rule_id = %s AND meta LIKE %s",
                $order_id, $rule_id, $like
            ) );
            if ( ! $already ) {
                // Snapshot: ürün ve kategoriler
                $product_id = 0; $product_name = '';
                $category_ids = []; $category_names = [];
                if ( method_exists( $item, 'get_product_id' ) ) {
                    $product_id = (int) $item->get_product_id();
                }
                $product = function_exists( 'wc_get_product' ) ? wc_get_product( $product_id ) : null;
                if ( $product ) {
                    $product_name = $product->get_name();
                }
                if ( $product_id ) {
                    $cat_ids = function_exists( 'wc_get_product_term_ids' ) ? wc_get_product_term_ids( $product_id, 'product_cat' ) : [];
                    $category_ids = array_map( 'intval', (array) $cat_ids );
                    if ( function_exists( 'get_term' ) ) {
                        foreach ( $category_ids as $cid ) {
                            $term = get_term( $cid, 'product_cat' );
                            if ( $term && ! is_wp_error( $term ) ) { $category_names[] = $term->name; }
                        }
                    }
                }
                $meta_json = wp_json_encode( array(
                    'type'            => 'line_item',
                    'order_item_id'   => $order_item_id,
                    'snapshot'        => array(
                        'product_id'     => $product_id,
                        'product_name'   => $product_name,
                        'category_ids'   => $category_ids,
                        'category_names' => $category_names,
                    ),
                    'email' => $customer_email,
                ) );
                $wpdb->insert( $table, array(
                    'order_id'        => $order_id,
                    'customer_id'     => (int) $customer_id,
                    'customer_email'  => $customer_email,
                    'rule_id'         => $rule_id,
                    'group_name'      => $group_name,
                    'discount_amount' => $discount_amount,
                    'order_total'     => $order_total,
                    'currency'        => $currency,
                    'created_at'      => gmdate( 'Y-m-d H:i:s' ),
                    'meta'            => $meta_json,
                ) );

                // Kural seçim önbelleğini kır
                update_option( 'knsdd_cache_version', time() );
            }
        }
        
        // Tüm kayıtlar başarılı - siparişi işaretle
        $this->mark_usage_recorded( $order_id );
    }

    /**
     * Siparişin kullanım kaydının daha önce yapılıp yapılmadığını kontrol eder.
     *
     * @param int $order_id Sipariş ID'si.
     * @return bool
     */
    private function is_usage_already_recorded( $order_id ) {
        return (bool) get_post_meta( $order_id, '_knsdd_usage_recorded', true );
    }

    /**
     * Siparişi kullanım kaydı yapılmış olarak işaretler.
     *
     * @param int $order_id Sipariş ID'si.
     */
    private function mark_usage_recorded( $order_id ) {
        update_post_meta( $order_id, '_knsdd_usage_recorded', '1' );
    }

    /**
     * İade edildiğinde usage_log'a negatif (telafi) kayıtlar ekler.
     *
     * @param int $order_id
     * @param int $refund_id
     */
    public function record_refund_adjustments( $order_id, $refund_id ) {
        $order  = wc_get_order( $order_id );
        $refund = wc_get_order( $refund_id );
        if ( ! $order || ! $refund ) { return; }

        global $wpdb;
        $table    = $wpdb->prefix . 'knsdd_usage_log';
        $currency = $order->get_currency();
        $customer_id = $order->get_customer_id();

        // Line item iadesi
        foreach ( $refund->get_items( 'line_item' ) as $refund_item ) {
            $refunded_item_id = $refund_item->get_meta( '_refunded_item_id', true );
            if ( empty( $refunded_item_id ) ) {
                $refunded_item_id = $refund_item->get_meta( 'refunded_item_id', true );
            }
            $refunded_item_id = (int) $refunded_item_id;
            if ( ! $refunded_item_id ) { continue; }

            $orig_item = $order->get_item( $refunded_item_id );
            if ( ! $orig_item ) { continue; }

            $rule_id     = $orig_item->get_meta( '_knsdd_rule_id', true );
            $group_name  = $orig_item->get_meta( '_knsdd_group', true );
            $orig_total_discount = (float) $orig_item->get_meta( '_knsdd_line_discount', true );
            if ( empty( $rule_id ) || $orig_total_discount <= 0 ) { continue; }

            $orig_qty = max( 1, (int) $orig_item->get_quantity() );
            $ref_qty  = abs( (int) $refund_item->get_quantity() );
            $ratio    = max( 0, min( 1, $ref_qty / $orig_qty ) );
            $adj_amount = round( $orig_total_discount * $ratio, 2 );
            if ( $adj_amount <= 0 ) { continue; }
            
            // Sipariş toplam tutarı (KDV hariç) - İade için negatif
            $order_total = -1 * ((float) $order->get_total() - (float) $order->get_total_tax());

            // Idempotent kontrol
            $refund_item_id = (int) $refund_item->get_id();
            $like = '%"refund_item_id":' . $refund_item_id . '%';
            $exists = $wpdb->get_var( $wpdb->prepare(
                "SELECT id FROM {$table} WHERE order_id = %d AND rule_id = %s AND meta LIKE %s",
                $order_id, $rule_id, $like
            ) );
            if ( $exists ) { continue; }

            $meta_json = wp_json_encode( array(
                'type'            => 'refund_line_item',
                'order_item_id'   => (int) $refunded_item_id,
                'refund_id'       => (int) $refund_id,
                'refund_item_id'  => $refund_item_id,
                'ratio'           => $ratio,
            ) );

            $wpdb->insert( $table, array(
                'order_id'        => $order_id,
                'customer_id'     => (int) $customer_id,
                'rule_id'         => $rule_id,
                'group_name'      => empty( $group_name ) ? '' : $group_name,
                'discount_amount' => -$adj_amount,
                'order_total'     => $order_total,
                'currency'        => $currency,
                'created_at'      => gmdate( 'Y-m-d H:i:s' ),
                'meta'            => $meta_json,
            ) );
        }

        // Fee iadesi
        foreach ( $refund->get_items( 'fee' ) as $refund_fee ) {
            $refunded_item_id = (int) $refund_fee->get_meta( '_refunded_item_id', true );
            if ( ! $refunded_item_id ) {
                $refunded_item_id = (int) $refund_fee->get_meta( 'refunded_item_id', true );
            }
            if ( ! $refunded_item_id ) { continue; }

            $orig_fee = $order->get_item( $refunded_item_id );
            if ( ! $orig_fee ) { continue; }

            $rule_id    = $orig_fee->get_meta( '_knsdd_rule_id', true );
            $group_name = $orig_fee->get_meta( '_knsdd_group', true );
            if ( empty( $rule_id ) ) { continue; }

            // Refund fee total genelde pozitif olur ve orijinal negatif indirimin telafisini temsil eder
            $telafi = abs( (float) $refund_fee->get_total() );
            if ( $telafi <= 0 ) { continue; }

            // Idempotent kontrol
            $refund_item_id = (int) $refund_fee->get_id();
            $like = '%"refund_item_id":' . $refund_item_id . '%';
            $exists = $wpdb->get_var( $wpdb->prepare(
                "SELECT id FROM {$table} WHERE order_id = %d AND rule_id = %s AND meta LIKE %s",
                $order_id, $rule_id, $like
            ) );
            if ( $exists ) { continue; }
            
            // Sipariş toplam tutarı (KDV hariç) - İade için negatif
            $order_total = -1 * ((float) $order->get_total() - (float) $order->get_total_tax());

            $meta_json = wp_json_encode( array(
                'type'            => 'refund_fee',
                'order_item_id'   => (int) $refunded_item_id,
                'refund_id'       => (int) $refund_id,
                'refund_item_id'  => $refund_item_id,
            ) );

            $wpdb->insert( $table, array(
                'order_id'        => $order_id,
                'customer_id'     => (int) $customer_id,
                'rule_id'         => $rule_id,
                'group_name'      => empty( $group_name ) ? '' : $group_name,
                'discount_amount' => -$telafi,
                'order_total'     => $order_total,
                'currency'        => $currency,
                'created_at'      => gmdate( 'Y-m-d H:i:s' ),
                'meta'            => $meta_json,
            ) );
        }
    }

    /**
     * Sipariş başarısız olursa (failed), daha önce kaydedilmiş indirimleri 
     * negatif ayna kayıtlarla dengeler (bir kez).
     */
    public function record_failed_reversal( $order_id ) {
        
        global $wpdb;
        $table = $wpdb->prefix . 'knsdd_usage_log';
        $order = function_exists( 'wc_get_order' ) ? wc_get_order( $order_id ) : null;
        if ( ! $order ) { 
            return; 
        }

        // Başarısız telafi kaydı zaten var mı?
        $exists = $wpdb->get_var( $wpdb->prepare(
            "SELECT COUNT(*) FROM {$table} WHERE order_id = %d AND discount_amount < 0",
            $order_id
        ) );
        
        if ( $exists ) { 
            return; 
        }

        // Bu siparişe ait pozitif kayıtları çek
        $rows = $wpdb->get_results( $wpdb->prepare(
            "SELECT id, rule_id, group_name, discount_amount, currency FROM {$table} WHERE order_id = %d AND discount_amount > 0",
            $order_id
        ), ARRAY_A );
        
        if ( empty( $rows ) ) { 
            return; 
        }

        $customer_id = $order->get_customer_id();
        $customer_email = '';
        if ( $customer_id ) {
            $user = get_user_by( 'id', (int) $customer_id );
            if ( $user && ! empty( $user->user_email ) ) {
                $customer_email = sanitize_email( $user->user_email );
            }
        }
        if ( empty( $customer_email ) ) {
            $customer_email = sanitize_email( $order->get_billing_email() );
        }

        $now = gmdate( 'Y-m-d H:i:s' );
        // Sipariş toplam tutarı (KDV hariç) - Başarısız için negatif
        $order_total = -1 * ((float) $order->get_total() - (float) $order->get_total_tax());
        
        foreach ( $rows as $r ) {
            
            $meta_json = wp_json_encode( array(
                'type' => 'failed_reversal',
                'source_log_id' => (int) $r['id'],
            ) );
            
            $wpdb->insert( $table, array(
                'order_id'        => $order_id,
                'customer_id'     => (int) $customer_id,
                'customer_email'  => $customer_email,
                'rule_id'         => $r['rule_id'],
                'group_name'      => $r['group_name'],
                'discount_amount' => - (float) $r['discount_amount'],
                'order_total'     => $order_total,
                'currency'        => $r['currency'],
                'created_at'      => $now,
                'meta'            => $meta_json,
            ) );
        }
    }

    /**
     * Sipariş iptal olursa (cancelled), daha önce kaydedilmiş indirimleri 
     * negatif ayna kayıtlarla dengeler (bir kez).
     */
    public function record_cancel_reversal( $order_id ) {
        
        global $wpdb;
        $table = $wpdb->prefix . 'knsdd_usage_log';
        $order = function_exists( 'wc_get_order' ) ? wc_get_order( $order_id ) : null;
        if ( ! $order ) { 
            return; 
        }

        // İptal telafi kaydı zaten var mı?
        $exists = $wpdb->get_var( $wpdb->prepare(
            "SELECT COUNT(*) FROM {$table} WHERE order_id = %d AND discount_amount < 0",
            $order_id
        ) );
        
        
        if ( $exists ) { 
                return; 
        }

        // Bu siparişe ait pozitif kayıtları çek
        $rows = $wpdb->get_results( $wpdb->prepare(
            "SELECT id, rule_id, group_name, discount_amount, currency FROM {$table} WHERE order_id = %d AND discount_amount > 0",
            $order_id
        ), ARRAY_A );
        
        if ( empty( $rows ) ) { 
                return; 
        }
        

        $customer_id = $order->get_customer_id();
        $customer_email = '';
        if ( $customer_id ) {
            $user = get_user_by( 'id', (int) $customer_id );
            if ( $user && ! empty( $user->user_email ) ) {
                $customer_email = sanitize_email( $user->user_email );
            }
        }
        if ( empty( $customer_email ) ) {
            $customer_email = sanitize_email( $order->get_billing_email() );
        }

        $now = gmdate( 'Y-m-d H:i:s' );
        // Sipariş toplam tutarı (KDV hariç) - İptal için negatif
        $order_total = -1 * ((float) $order->get_total() - (float) $order->get_total_tax());
        
        foreach ( $rows as $r ) {
            
            $meta_json = wp_json_encode( array(
                'type' => 'cancel_reversal',
                'source_log_id' => (int) $r['id'],
            ) );
            
            $insert_result = $wpdb->insert( $table, array(
                'order_id'        => $order_id,
                'customer_id'     => (int) $customer_id,
                'customer_email'  => $customer_email,
                'rule_id'         => $r['rule_id'],
                'group_name'      => $r['group_name'],
                'discount_amount' => - (float) $r['discount_amount'],
                'order_total'     => $order_total,
                'currency'        => $r['currency'],
                'created_at'      => $now,
                'meta'            => $meta_json,
            ) );
            
            
            // Kural bazlı çerez sistemi kaldırıldı
        }
    }

    /**
     * Sipariş durumu değiştiğinde: geçersiz durumdan (cancelled/failed) geçerli duruma (processing/completed)
     * geçiş yapılırsa, daha önce eklenmiş negatif kayıtları tersine çevir.
     * 
     * @param int $order_id
     * @param string $old_status Eski durum (wc- prefix'siz)
     * @param string $new_status Yeni durum (wc- prefix'siz)
     * @param WC_Order $order
     */
    public function handle_status_transition_reversal( $order_id, $old_status, $new_status, $order ) {
        // Geçersiz durumların listesi
        $invalid_statuses = array( 'cancelled', 'failed', 'refunded' );
        
        // Geçerli durumların listesi
        $valid_statuses = array( 'processing', 'completed', 'on-hold' );
        
        // Sadece geçersiz -> geçerli geçişlerde çalış
        if ( ! in_array( $old_status, $invalid_statuses ) || ! in_array( $new_status, $valid_statuses ) ) {
            return;
        }
        
        global $wpdb;
        $table = $wpdb->prefix . 'knsdd_usage_log';
        
        // Bu sipariş için daha önce eklenmiş reversal kayıtlarını bul (negatif kayıtlar)
        $reversal_rows = $wpdb->get_results( $wpdb->prepare(
            "SELECT id, rule_id, group_name, discount_amount, currency, meta FROM {$table} WHERE order_id = %d AND discount_amount < 0",
            $order_id
        ), ARRAY_A );
        
        if ( empty( $reversal_rows ) ) {
            return;
        }
        
        // Her negatif kaydın tersini ekle (pozitif olarak geri ekle)
        $customer_id = $order->get_customer_id();
        $customer_email = '';
        if ( $customer_id ) {
            $user = get_user_by( 'id', (int) $customer_id );
            if ( $user && ! empty( $user->user_email ) ) {
                $customer_email = sanitize_email( $user->user_email );
            }
        }
        if ( empty( $customer_email ) ) {
            $customer_email = sanitize_email( $order->get_billing_email() );
        }
        
        $now = gmdate( 'Y-m-d H:i:s' );
        $order_total = (float) $order->get_total() - (float) $order->get_total_tax();
        
        foreach ( $reversal_rows as $r ) {
            // Reversal'in reversal'ı zaten var mı kontrol et (idempotency)
            $meta_check = wp_json_encode( array(
                'type' => 'reversal_of_reversal',
                'source_reversal_id' => (int) $r['id'],
            ) );
            
            $exists = $wpdb->get_var( $wpdb->prepare(
                "SELECT id FROM {$table} WHERE order_id = %d AND rule_id = %s AND meta = %s",
                $order_id,
                $r['rule_id'],
                $meta_check
            ) );
            
            if ( $exists ) {
                continue;
            }
            
            // Negatif kaydın tersini ekle (pozitif yap)
            $wpdb->insert( $table, array(
                'order_id'        => $order_id,
                'customer_id'     => (int) $customer_id,
                'customer_email'  => $customer_email,
                'rule_id'         => $r['rule_id'],
                'group_name'      => $r['group_name'],
                'discount_amount' => - (float) $r['discount_amount'], // Negatifin negatifi = pozitif
                'order_total'     => $order_total,
                'currency'        => $r['currency'],
                'created_at'      => $now,
                'meta'            => $meta_check,
            ) );
        }
    }

    /**
     * Thankyou sayfasında, bu siparişte kullanılan kural ID'leri için
     * tarayıcı çerezi (knsdd_used_<rule_id>) set eder. Böylece aynı tarayıcıda
     * misafir tekrarını mini sepetten itibaren erken engelleriz.
     *
     * @param int $order_id
     * @return void
     */
    public function mark_rules_used_cookie( $order_id ) {
        if ( is_admin() ) { return; }
        if ( function_exists( 'defined' ) && defined( 'REST_REQUEST' ) && REST_REQUEST ) { return; }
        // Özelliği koşullu aç/kapat
        $enabled = apply_filters( 'knsdd_enable_thankyou_cookie', true );
        if ( ! $enabled ) { return; }
        $order = function_exists( 'wc_get_order' ) ? wc_get_order( $order_id ) : null;
        if ( ! $order ) { return; }

        // Sipariş kalemlerinden kullanılan tüm rule_id'leri topla
        $rule_ids = [];
        $groups   = [];
        foreach ( $order->get_items( 'fee' ) as $item ) {
            $rid = $item->get_meta( '_knsdd_rule_id', true );
            if ( ! empty( $rid ) ) { $rule_ids[ $rid ] = true; }
            $g = $item->get_meta( '_knsdd_group', true );
            if ( ! empty( $g ) ) { $groups[ $g ] = true; }
        }
        foreach ( $order->get_items( 'line_item' ) as $item ) {
            $rid = $item->get_meta( '_knsdd_rule_id', true );
            if ( ! empty( $rid ) ) { $rule_ids[ $rid ] = true; }
            $g = $item->get_meta( '_knsdd_group', true );
            if ( ! empty( $g ) ) { $groups[ $g ] = true; }
        }

        if ( empty( $rule_ids ) && empty( $groups ) ) { return; }

        $expire = time() + ( defined( 'YEAR_IN_SECONDS' ) ? YEAR_IN_SECONDS : ( 365 * ( defined('DAY_IN_SECONDS') ? DAY_IN_SECONDS : 86400 ) ) );

        // Kural bazlı çerez sistemi kaldırıldı - sadece veritabanı kullanılıyor
    }

    /**
     * Handles direct order deletion from the admin panel.
     * Reverses usage stats as if the order was cancelled.
     *
     * @param int $post_id The ID of the post being deleted.
     */
    public function handle_order_deletion( $post_id ) {
        
        // Sadece shop_order post type'ı için çalış
        $post_type = get_post_type( $post_id );
        
        if ( $post_type !== 'shop_order' ) {
            return;
        }

        // Treat deletion as a cancellation for usage tracking purposes.
        $this->record_cancel_reversal( $post_id );
    }

    /**
     * WooCommerce specific order deletion handler
     */
    public function handle_wc_order_deletion( $order_id ) {
        $this->record_cancel_reversal( $order_id );
    }
}
