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

/**
 * KNSDD_Page_Rules Class
 *
 * "Kural Yönetimi" admin sayfasını oluşturur ve yönetir.
 */
class KNSDD_Page_Rules {

    public function __construct() {
        add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
    }

    /**
     * Sadece bu sayfada kullanılacak script ve stil dosyalarını yükler.
     * YENİ YAPI: JavaScript dosyaları modüler olarak yüklenir.
     */
    public function enqueue_scripts( $hook ) {
        // Daha sağlam tespit: Bazı kurulumlarda $hook beklenen slug'ı
        // içermeyebiliyor. Hem $hook hem de $_GET['page'] ile kontrol et.
        $is_rules_page = false;
        if ( isset( $_GET['page'] ) && $_GET['page'] === 'knsdd-rules' ) {
            $is_rules_page = true;
        }
        if ( strpos( (string) $hook, 'knsdd-rules' ) !== false ) {
            $is_rules_page = true;
        }
        if ( ! $is_rules_page ) {
            return;
        }
        
        // Stiller - Yerel dosyalar (WordPress.org uyumluluğu)
        wp_enqueue_style( 'select2-css', KNSDD_PLUGIN_URL . 'assets/css/vendor/select2.min.css', array(), '4.1.0-rc.0' );
        wp_enqueue_style( 'knsdd-admin-css', KNSDD_PLUGIN_URL . 'assets/css/index.css', array(), KNSDD_VERSION );
        wp_enqueue_style( 'flatpickr-css', KNSDD_PLUGIN_URL . 'assets/css/vendor/flatpickr.min.css', array(), '4.6.13' );
        wp_enqueue_style( 'knsdd-vendors-overrides-css', KNSDD_PLUGIN_URL . 'assets/css/vendors-overrides.css', array('select2-css'), KNSDD_VERSION );

        // Temel Kütüphaneler - Yerel dosyalar
        wp_enqueue_script( 'jquery' );
        wp_enqueue_script( 'select2-js', KNSDD_PLUGIN_URL . 'assets/js/vendor/select2.min.js', array( 'jquery' ), '4.1.0-rc.0', true );
        wp_enqueue_script( 'flatpickr-js', KNSDD_PLUGIN_URL . 'assets/js/vendor/flatpickr.min.js', array(), '4.6.13', true );
        // Iconify Web Component (Tabler ikonları için) - Yerel dosya
        wp_enqueue_script( 'iconify-icon', KNSDD_PLUGIN_URL . 'assets/js/vendor/iconify-icon.min.js', array(), '2.1.0', true );

        // Dil dosyaları (Select2 ve Flatpickr için) - Otomatik yükleme
        KNSDD_Vendor_I18n::enqueue_vendor_locales( true, true );

        // --- YENİ MODÜLER JAVASCRIPT YAPISI ---

        // 1. Ortak Fonksiyonlar
        wp_enqueue_script( 'knsdd-admin-common-js', KNSDD_PLUGIN_URL . 'assets/js/admin-common.js', array( 'jquery' ), KNSDD_VERSION, true );
        
        // 2. Kural Sayfası Modülleri (Sırayla)
        $main_deps = array( 'jquery', 'jquery-migrate', 'knsdd-admin-common-js', 'select2-js' );
        $rules_render_ver = file_exists( KNSDD_PLUGIN_DIR . 'assets/js/rules/render.js' ) ? (string) filemtime( KNSDD_PLUGIN_DIR . 'assets/js/rules/render.js' ) : KNSDD_VERSION;
        $rules_events_ver = file_exists( KNSDD_PLUGIN_DIR . 'assets/js/rules/events.js' ) ? (string) filemtime( KNSDD_PLUGIN_DIR . 'assets/js/rules/events.js' ) : KNSDD_VERSION;

        wp_enqueue_script( 'knsdd-rules-utils', KNSDD_PLUGIN_URL . 'assets/js/rules/utils.js', $main_deps, KNSDD_VERSION, true );
        wp_enqueue_script( 'knsdd-select2-helpers', KNSDD_PLUGIN_URL . 'assets/js/rules/select2-helpers.js', array('knsdd-rules-utils', 'select2-js'), KNSDD_VERSION, true );
        wp_enqueue_script( 'knsdd-rules-validators', KNSDD_PLUGIN_URL . 'assets/js/rules/validators.js', array('knsdd-rules-utils'), KNSDD_VERSION, true );
        wp_enqueue_script( 'knsdd-rules-render', KNSDD_PLUGIN_URL . 'assets/js/rules/render.js', array('knsdd-rules-validators', 'knsdd-select2-helpers'), $rules_render_ver, true );
        wp_enqueue_script( 'knsdd-rules-modals', KNSDD_PLUGIN_URL . 'assets/js/rules/modals.js', array('knsdd-rules-render', 'knsdd-select2-helpers', 'iconify-icon'), KNSDD_VERSION, true );
        wp_enqueue_script( 'knsdd-modal-campaign-bogo', KNSDD_PLUGIN_URL . 'assets/js/rules/modal-campaign-bogo.js', array('knsdd-rules-modals'), KNSDD_VERSION, true );
        wp_enqueue_script( 'knsdd-rules-events', KNSDD_PLUGIN_URL . 'assets/js/rules/events.js', array('knsdd-modal-campaign-bogo'), $rules_events_ver, true );
        wp_enqueue_script( 'knsdd-rule-limit-observer', KNSDD_PLUGIN_URL . 'assets/js/rules/rule-limit-observer.js', array('knsdd-rules-render'), KNSDD_VERSION, true );
        
        $this->localize_script_data();
    }

    private function localize_script_data() {
        $groups = KNSDD_Data::get_groups();
        $data = [ 'rules' => [], 'rule_types' => [], 'dates' => [], 'statuses' => [] ];

        foreach ( $groups as $group ) {
            // Güvenlik kontrolü: $group string olmalı
            if ( ! is_string( $group ) || empty( $group ) ) {
                continue;
            }
            
            // Grup rule_type'ını ekle
            $data['rule_types'][ $group ] = KNSDD_Data::get_group_rule_type( $group );
            
            // Grup tarihlerini ve status'unu ekle (expired kontrolü için)
            $dates = KNSDD_Data::get_dates_for_group( $group );
            $paused = KNSDD_Data::is_group_paused( $group );
            $data['dates'][ $group ] = $dates;
            $data['statuses'][ $group ] = KNSDD_Utils::get_group_status_info( $dates, $paused );
            
            $rules = KNSDD_Data::get_rules_for_group( $group );
            foreach ( $rules as $key => $rule ) {
                if ( ! empty( $rule['product'] ) ) {
                    if ( is_array( $rule['product'] ) ) {
                        $product_names = [];
                        foreach ( $rule['product'] as $product_id ) {
                            $product = wc_get_product( $product_id );
                            if ( $product ) {
                                $img_id = method_exists( $product, 'get_image_id' ) ? $product->get_image_id() : 0;
                                $thumb  = $img_id ? wp_get_attachment_image_url( $img_id, 'thumbnail' ) : '';
                                $status = method_exists( $product, 'get_stock_status' ) ? (string) $product->get_stock_status() : '';
                                $mstock = method_exists( $product, 'get_manage_stock' ) ? (bool) $product->get_manage_stock() : false;
                                $qty    = ( $mstock && method_exists( $product, 'get_stock_quantity' ) ) ? $product->get_stock_quantity() : null;
                                $product_names[] = [
                                    'id'    => $product_id,
                                    'name'  => $product->get_name(),
                                    'thumb' => $thumb ? esc_url_raw( $thumb ) : '',
                                    'sku'   => method_exists( $product, 'get_sku' ) ? (string) $product->get_sku() : '',
                                    'stock_status' => $status,
                                    'manage_stock' => $mstock ? 1 : 0,
                                    'stock_qty'    => ( $qty === null ? null : intval( $qty ) ),
                                ];
                            }
                        }
                        $rules[ $key ]['product_details'] = $product_names;
                    } else {
                        $product = wc_get_product( $rule['product'] );
                        if ( $product ) {
                            $img_id = method_exists( $product, 'get_image_id' ) ? $product->get_image_id() : 0;
                            $thumb  = $img_id ? wp_get_attachment_image_url( $img_id, 'thumbnail' ) : '';
                            $status = method_exists( $product, 'get_stock_status' ) ? (string) $product->get_stock_status() : '';
                            $mstock = method_exists( $product, 'get_manage_stock' ) ? (bool) $product->get_manage_stock() : false;
                            $qty    = ( $mstock && method_exists( $product, 'get_stock_quantity' ) ) ? $product->get_stock_quantity() : null;
                            $rules[ $key ]['product_details'] = [ [
                                'id'    => $rule['product'],
                                'name'  => $product->get_name(),
                                'thumb' => $thumb ? esc_url_raw( $thumb ) : '',
                                'sku'   => method_exists( $product, 'get_sku' ) ? (string) $product->get_sku() : '',
                                'stock_status' => $status,
                                'manage_stock' => $mstock ? 1 : 0,
                                'stock_qty'    => ( $qty === null ? null : intval( $qty ) ),
                            ] ];
                        }
                    }
                }

                if ( ! empty( $rule['allowed_customers'] ) && is_array( $rule['allowed_customers'] ) ) {
                    $customer_details = [];
                    foreach ( $rule['allowed_customers'] as $user_id ) {
                        $user = get_user_by( 'id', (int) $user_id );
                        if ( $user ) {
                            $customer_details[] = [
                                'id'   => $user->ID,
                                'name' => esc_html( $user->display_name . ' (' . $user->user_email . ')' ),
                            ];
                        }
                    }
                    $rules[ $key ]['allowed_customer_details'] = $customer_details;
                }
            }
            $data['rules'][ $group ] = $rules;
        }

        $plugin_locale = method_exists( 'KNSDD_I18n', 'determine_locale' ) ? KNSDD_I18n::determine_locale() : ( function_exists( 'get_user_locale' ) ? get_user_locale() : get_locale() );
        // Tüm dilleri destekle (sadece tr değil)
        $s2_lang = substr( $plugin_locale, 0, 2 );
        $s2_locale = ( $s2_lang !== 'en' ) ? $s2_lang : '';

        // Uyarı sistemi ayarlarını oku (gruplar sayfası ile aynı sistem)
        $settings = get_option( 'knsdd_global_settings', array() );
        $warning_location = isset( $settings['warning_location'] ) ? $settings['warning_location'] : 'inplace';
        $warning_theme = isset( $settings['warning_theme'] ) ? $settings['warning_theme'] : 'rose';
        $inline_warning_ms = isset( $settings['inline_warning_ms'] ) ? intval( $settings['inline_warning_ms'] ) : 5000;
        $auto_fill_category_from_products = isset( $settings['auto_fill_category_from_products'] ) ? (int) !! $settings['auto_fill_category_from_products'] : 1;

        // Grup rule_type bilgilerini topla
        $group_rule_types = array();
        foreach ( $groups as $group ) {
            $group_rule_types[ $group ] = KNSDD_Data::get_group_rule_type( $group );
        }

        wp_localize_script( 'knsdd-admin-common-js', 'knsdd_data', array(
            'ajax_url'   => admin_url( 'admin-ajax.php' ),
            'nonce'      => wp_create_nonce( 'knsdd_admin_nonce' ),
            'groups'     => $groups,
            'group_rule_types' => $group_rule_types,
            'data'       => $data,
            'categories' => $this->get_product_categories(),
            'customers'  => [],
            'page'       => 'rules',
            'settings'   => array(
                'warning_location'  => $warning_location,
                'warning_theme'     => $warning_theme,
                'inline_warning_ms' => $inline_warning_ms,
                'auto_fill_category_from_products' => $auto_fill_category_from_products,
            ),
            'license'    => array(
                'max_rules_per_group'  => KNSDD_License::get_max_rules_per_group(),
                'upgrade_url'          => KNSDD_License::get_upgrade_url( 'rules' ),
            ),
            // Select2 dil kodu (tüm diller için)
            'select2_lang' => $s2_locale,
            'i18n'       => array(
                's2_locale'              => $s2_locale,
                's2_searching'           => __( 'Aranıyor…', 'kns-dynamic-discounts-for-woocommerce' ),
                's2_no_results'          => __( 'Sonuç bulunamadı', 'kns-dynamic-discounts-for-woocommerce' ),
                's2_min_input'           => __( 'En az %d karakter daha girmelisiniz', 'kns-dynamic-discounts-for-woocommerce' ),
                // Select2 tooltip metinleri
                's2_remove_item'         => __( 'Sil', 'kns-dynamic-discounts-for-woocommerce' ),
                's2_clear_selection'     => __( 'Seçimi temizle', 'kns-dynamic-discounts-for-woocommerce' ),
                's2_stock_qty_tip'       => __( 'Stok miktarı', 'kns-dynamic-discounts-for-woocommerce' ),
                // Stok durum etiketleri (renkli nokta ipuçları)
                's2_status_instock'      => __( 'Stokta', 'kns-dynamic-discounts-for-woocommerce' ),
                's2_status_onbackorder'  => __( 'Tedarikte', 'kns-dynamic-discounts-for-woocommerce' ),
                's2_status_outofstock'   => __( 'Stokta yok', 'kns-dynamic-discounts-for-woocommerce' ),
                // Detaylı tooltip metinleri
                's2_status_instock_tip'      => __( 'Stokta', 'kns-dynamic-discounts-for-woocommerce' ),
                's2_status_onbackorder_tip'  => __( 'Tedarikte — Sipariş verilebilir', 'kns-dynamic-discounts-for-woocommerce' ),
                's2_status_outofstock_tip'   => __( 'Stokta yok — Satış kapalı', 'kns-dynamic-discounts-for-woocommerce' ),
                'login_required_tooltip' => __( 'İşaretliyse, bu indirim sadece üye girişi yapmış müşteriler için geçerlidir.', 'kns-dynamic-discounts-for-woocommerce' ),
                'configure_messages'     => __( 'Mesajları Yapılandır', 'kns-dynamic-discounts-for-woocommerce' ),
                'usage_limits'           => __( 'Kullanım Limitleri', 'kns-dynamic-discounts-for-woocommerce' ),
                'usage_limits_pro'       => __( 'Kullanım Limitleri (Pro)', 'kns-dynamic-discounts-for-woocommerce' ),
                'usage_limits_pro_notice'=> __( 'Kullanım limitleri Pro sürümde kullanılabilir.', 'kns-dynamic-discounts-for-woocommerce' ),
                'duplicate_rule'         => __( 'Kuralı Kopyala', 'kns-dynamic-discounts-for-woocommerce' ),
                'duplicate_rule_disabled' => __( 'Özel kampanyalarda kopyalama kullanılamaz', 'kns-dynamic-discounts-for-woocommerce' ),
                'delete_rule'            => __( 'Kuralı Sil', 'kns-dynamic-discounts-for-woocommerce' ),
                'select_category'        => __( 'Kategori Seçiniz', 'kns-dynamic-discounts-for-woocommerce' ),
                'select_placeholder'     => __( 'Seçiniz', 'kns-dynamic-discounts-for-woocommerce' ),
                'select_product'         => __( 'Ürün ya da Ürünler Seçiniz', 'kns-dynamic-discounts-for-woocommerce' ),
                'select_customer'        => __( 'Müşteri ya da Müşteriler Seçiniz', 'kns-dynamic-discounts-for-woocommerce' ),
                'clear_all'              => __( 'Tümünü sil', 'kns-dynamic-discounts-for-woocommerce' ),
                'quantity_discount'      => __( 'Miktar İndirimi', 'kns-dynamic-discounts-for-woocommerce' ),
                'special_campaign'       => __( 'Özel Kampanya', 'kns-dynamic-discounts-for-woocommerce' ),
                'not_configured'         => __( 'Yapılandırılmadı', 'kns-dynamic-discounts-for-woocommerce' ),
                'buy_x_pay_y_summary'    => __( '%1$s Al, %2$s Öde', 'kns-dynamic-discounts-for-woocommerce' ),
                'buy_x_get_y_discount'   => __( 'A Al, B\'ye İndirim', 'kns-dynamic-discounts-for-woocommerce' ),
                'trigger_label'          => __( 'Tetikleyici', 'kns-dynamic-discounts-for-woocommerce' ),
                'target_label'           => __( 'Hedef', 'kns-dynamic-discounts-for-woocommerce' ),
                'discount_label'         => __( 'İndirim', 'kns-dynamic-discounts-for-woocommerce' ),
                'trigger_type_label'     => __( 'Tetikleyici Türü', 'kns-dynamic-discounts-for-woocommerce' ),
                'target_type_label'      => __( 'Hedef Türü', 'kns-dynamic-discounts-for-woocommerce' ),
                'product'                => __( 'Ürün', 'kns-dynamic-discounts-for-woocommerce' ),
                'category'               => __( 'Kategori', 'kns-dynamic-discounts-for-woocommerce' ),
                // Yeni: Kategori + Ürün kombinasyonu desteği
                'trigger_scope_label'    => __( 'Tetikleyici Kapsam', 'kns-dynamic-discounts-for-woocommerce' ),
                'trigger_scope_desc'     => __( 'Kategori ve/veya ürün seçerek kampanya kapsamını belirleyin. En az birini seçmelisiniz.', 'kns-dynamic-discounts-for-woocommerce' ),
                'trigger_scope_hint'     => __( 'Bu alan, kampanyayı tetikleyecek ürünleri belirler. Sadece kategori seçerseniz o kategorideki tüm ürünler, sadece ürün seçerseniz yalnız seçtikleriniz, kategori ve ürün birlikte seçerseniz ilgili kategorideki seçtiğiniz ürünler dikkate alınır.', 'kns-dynamic-discounts-for-woocommerce' ),
                'trigger_category_optional' => __( 'Kategori (Opsiyonel)', 'kns-dynamic-discounts-for-woocommerce' ),
                'trigger_products_optional' => __( 'Ürünler (Opsiyonel)', 'kns-dynamic-discounts-for-woocommerce' ),
                'target_scope_label'     => __( 'Hedef Kapsam', 'kns-dynamic-discounts-for-woocommerce' ),
                'target_scope_desc'      => __( 'Kategori ve/veya ürün seçerek indirim hedefini belirleyin. En az birini seçmelisiniz.', 'kns-dynamic-discounts-for-woocommerce' ),
                'target_scope_hint'      => __( 'Bu alan, indirimin uygulanacağı ürünleri belirler. Sadece kategori seçerseniz o kategorideki tüm ürünler, sadece ürün seçerseniz yalnız seçtikleriniz, kategori ve ürün birlikte seçerseniz ilgili kategorideki seçtiğiniz ürünler indirim kapsamındadır.', 'kns-dynamic-discounts-for-woocommerce' ),
                'target_category_optional' => __( 'Kategori (Opsiyonel)', 'kns-dynamic-discounts-for-woocommerce' ),
                'target_products_optional' => __( 'Ürünler (Opsiyonel)', 'kns-dynamic-discounts-for-woocommerce' ),
                'trigger_quantity_label' => __( 'Tetikleyici Miktar', 'kns-dynamic-discounts-for-woocommerce' ),
                'trigger_quantity_desc'  => __( 'Sepetten toplam kaç adet gerekli?', 'kns-dynamic-discounts-for-woocommerce' ),
                'trigger_quantity_tooltip_product' => __( 'Seçili ürünlerden toplam kaç adet alındığında kampanya tetiklensin? Örnek: "2" girerseniz, seçili ürünlerden toplam 2 veya daha fazla adet sepette olduğunda kampanya aktif olur.', 'kns-dynamic-discounts-for-woocommerce' ),
                'trigger_quantity_tooltip_category' => __( 'Seçili kategorideki TÜM ürünlerden toplam kaç adet alındığında kampanya tetiklensin? Örnek: "3" girerseniz, kategorideki herhangi bir üründen toplam 3 veya daha fazla adet sepette olduğunda kampanya aktif olur.', 'kns-dynamic-discounts-for-woocommerce' ),
                'target_quantity_label'  => __( 'Hedef Miktar', 'kns-dynamic-discounts-for-woocommerce' ),
                'target_quantity_desc'   => __( 'Kaç adete indirim uygulanacak?', 'kns-dynamic-discounts-for-woocommerce' ),
                'target_quantity_tooltip_product' => __( 'Her set için seçili hedef ürünlerden kaç adete indirim uygulanacak? Örnek: Tetikleyici 2 adet, hedef 1 adet ise → Her 2 alışta 1 adete indirim uygulanır.', 'kns-dynamic-discounts-for-woocommerce' ),
                'target_quantity_tooltip_category' => __( 'Her set için hedef kategorisindeki ürünlerden kaç adete indirim uygulanacak? Örnek: Tetikleyici 3 adet, hedef 2 adet ise → Her 3 alışta kategoriden 2 adete indirim uygulanır.', 'kns-dynamic-discounts-for-woocommerce' ),
                'discount_value_label'   => __( 'İndirim Değeri', 'kns-dynamic-discounts-for-woocommerce' ),
                'free'                   => __( 'Bedava', 'kns-dynamic-discounts-for-woocommerce' ),
                'buy_x_get_y_summary'    => __( '%1$s (%2$s) al → %3$s (%4$s) %5$s', 'kns-dynamic-discounts-for-woocommerce' ),
                'configure'              => __( 'Yapılandır', 'kns-dynamic-discounts-for-woocommerce' ),
                'configured'             => __( 'Yapılandırıldı', 'kns-dynamic-discounts-for-woocommerce' ),
                'please_select_group'    => __( 'Lütfen bir grup seçin.', 'kns-dynamic-discounts-for-woocommerce' ),
                'duplicate_rules_warning'=> __( 'Aynı ayarlara sahip kopya kurallar bulundu. Kırmızı ile işaretlenen satırları düzenleyin ya da silin.', 'kns-dynamic-discounts-for-woocommerce' ),
                'duplicate_group_rules_with_overlap' => __( "Bu grup '%s' grubu ile bire bir aynı kurallar içermektedir. Lütfen tarih aralığını değiştirin.", 'kns-dynamic-discounts-for-woocommerce' ),
                'conflict_category_product' => _x( 'Bu grupta aynı kategori için hem kategori düzeyinde hem de bu kategorideki bir ürüne yönelik kural tanımlı. Lütfen çakışmayı giderin.', 'admin page localized data', 'kns-dynamic-discounts-for-woocommerce' ),
                'products_pruned_due_category' => __( '%d ürün seçili kategoride olmadığı için kaldırıldı.', 'kns-dynamic-discounts-for-woocommerce' ),
                'bogo_settings_changed_warning' => __( 'Kampanya ayarlarını değiştirdiniz. Mesajları gözden geçirin: <a href="#" class="knsdd-open-messages-from-warning" data-rule-id="%RULE_ID%">Mesajları Düzenle</a>', 'kns-dynamic-discounts-for-woocommerce' ),
                'min_label'              => __( 'Min', 'kns-dynamic-discounts-for-woocommerce' ),
                'max_label'              => __( 'Max', 'kns-dynamic-discounts-for-woocommerce' ),
                'members_only_label'     => __( 'Sadece Üyeler', 'kns-dynamic-discounts-for-woocommerce' ),
                'first_order_label'      => __( 'İlk Sipariş', 'kns-dynamic-discounts-for-woocommerce' ),
                'close_button'           => __( 'Kapat', 'kns-dynamic-discounts-for-woocommerce' ),
                'cancel_button'          => __( 'İptal', 'kns-dynamic-discounts-for-woocommerce' ),
                'continue_button'        => __( 'Devam Et', 'kns-dynamic-discounts-for-woocommerce' ),
                'first_order_tooltip'    => __( 'İlk sipariş kontrolü için üyeler giriş yapmalı, misafir müşteriler ise ödeme sayfasında e-posta girmelidir.', 'kns-dynamic-discounts-for-woocommerce' ),
                'campaign_type_label'    => __( 'Kampanya Türü', 'kns-dynamic-discounts-for-woocommerce' ),
                'buy_x_label'            => __( 'Alınacak Miktar (X)', 'kns-dynamic-discounts-for-woocommerce' ),
                'pay_y_label'            => __( 'Ödenecek Miktar (Y)', 'kns-dynamic-discounts-for-woocommerce' ),
                'nth_percent_off'        => __( "N'inci Ürüne İndirim", 'kns-dynamic-discounts-for-woocommerce' ),
                'nth_label'              => __( "N'inci Ürün (N)", 'kns-dynamic-discounts-for-woocommerce' ),
                'percent_label'          => __( 'İndirim Oranı (%)', 'kns-dynamic-discounts-for-woocommerce' ),
                'nth_percent_off_summary' => __( '%1$s\'inci ürüne %2$s indirim', 'kns-dynamic-discounts-for-woocommerce' ),
                'cart_total_discount_summary' => __( '%1$s ve üzerine %2$s indirim', 'kns-dynamic-discounts-for-woocommerce' ),
                'special_min_max_note'   => __( 'Özel kampanyalarda Min/Max kullanılmaz.', 'kns-dynamic-discounts-for-woocommerce' ),
                'special_cart_total_note'=> __( 'Sepet tutarı kampanyalarında Kategori/Ürün seçimi devre dışı bırakılır.', 'kns-dynamic-discounts-for-woocommerce' ),
                'special_bogo_note'      => __( 'A Al, B\'ye İndirim kampanyalarında Kategori/Ürün seçimi modal içinden yapılır.', 'kns-dynamic-discounts-for-woocommerce' ),
                'invalid_buyxpayy'       => __( 'Geçersiz değer: X >= 1, Y >= 0 ve X > Y olmalı.', 'kns-dynamic-discounts-for-woocommerce' ),
                'invalid_nthpercent'     => __( "Geçersiz değer: N ≥ 1 ve % 1–100 arasında olmalı.", 'kns-dynamic-discounts-for-woocommerce' ),
                'invalid_cart_total_discount' => __( "Geçersiz değer: Min. sepet tutarı ve indirim değeri 0'dan büyük olmalı. Tutar indirimi sepet tutarından büyük olamaz.", 'kns-dynamic-discounts-for-woocommerce' ),
                'error_discount_val_vs_total' => __( 'Uyarı: Tutar indirimi, minimum sepet tutarından küçük olmalıdır.', 'kns-dynamic-discounts-for-woocommerce' ),
                'error_percent_max'      => __( 'Uyarı: Yüzde indirimi 100\'den küçük olmalıdır.', 'kns-dynamic-discounts-for-woocommerce' ),
                'error_positive_values'  => __( 'Uyarı: Lütfen tüm alanlara 0\'dan büyük değerler girin.', 'kns-dynamic-discounts-for-woocommerce' ),
                'trigger_product_required' => __( 'Lütfen tetikleyici ürün seçin.', 'kns-dynamic-discounts-for-woocommerce' ),
                'trigger_category_required' => __( 'Lütfen tetikleyici kategori seçin.', 'kns-dynamic-discounts-for-woocommerce' ),
                'trigger_scope_required'    => __( 'Lütfen tetikleyici kategori ve/veya ürün seçin.', 'kns-dynamic-discounts-for-woocommerce' ),
                'target_product_required' => __( 'Lütfen hedef ürün seçin.', 'kns-dynamic-discounts-for-woocommerce' ),
                'target_category_required' => __( 'Lütfen hedef kategori seçin.', 'kns-dynamic-discounts-for-woocommerce' ),
                'target_scope_required'    => __( 'Lütfen hedef kategori ve/veya ürün seçin.', 'kns-dynamic-discounts-for-woocommerce' ),
                // BOGO özel kontrol: Tetikleyici ve hedef ürün setleri birebir aynı olamaz
                'bogo_same_products_error' => __( 'Tetikleyici ve hedef ürün seçimleri birebir aynı olamaz. Lütfen farklı ürün(ler) seçin.', 'kns-dynamic-discounts-for-woocommerce' ),
                // BOGO otomatik kesişim temizleme bilgilendirme mesajları
                'bogo_pruned_overlap_from_target' => __( '%d ürün tetikleyici ile çakıştığı için hedeften çıkarıldı.', 'kns-dynamic-discounts-for-woocommerce' ),
                'bogo_pruned_overlap_from_trigger' => __( '%d ürün hedef ile çakıştığı için tetikleyiciden çıkarıldı.', 'kns-dynamic-discounts-for-woocommerce' ),
                // Tooltip (i) metinleri – named placeholderlar: %TRIGGER%, %TARGET%, %CATEGORY%
                'trigger_tooltip_products_only' => __( 'Sepette seçtiğiniz tetikleyici ürünlerden toplam %TRIGGER% adet bulunmalıdır. Örnek: Bu ürünlerden her %TRIGGER% adetlik alışta hedef indirimi tetiklenir.', 'kns-dynamic-discounts-for-woocommerce' ),
                'trigger_tooltip_category_only' => __( 'Sepette %CATEGORY% kategorisine ait ürünlerden toplam %TRIGGER% adet bulunmalıdır. Örnek: Bu kategoriden her %TRIGGER% adetlik alışta hedef indirimi tetiklenir.', 'kns-dynamic-discounts-for-woocommerce' ),
                'trigger_tooltip_both' => __( 'Sepette %CATEGORY% kategorisindeki seçtiğiniz tetikleyici ürünlerden toplam %TRIGGER% adet bulunmalıdır. (Kategori + ürün birlikte değerlendirilir.) Örnek: Bu listedeki ürünlerin her %TRIGGER% adedinde hedef indirimi tetiklenir.', 'kns-dynamic-discounts-for-woocommerce' ),
                'trigger_tooltip_default' => __( 'Tetikleyici kapsamı seçiniz: Kategori ve/veya ürün. En az biri gereklidir.', 'kns-dynamic-discounts-for-woocommerce' ),
                'target_tooltip_products_only' => __( 'Her tetikleme seti için seçtiğiniz hedef ürünlerden %TARGET% adete indirim uygulanır. Örnek: Tetikleyici %TRIGGER%, hedef %TARGET% ise → Her %TRIGGER% tetiklemede hedef ürünlerden %TARGET% adet indirimli olur.', 'kns-dynamic-discounts-for-woocommerce' ),
                'target_tooltip_category_only' => __( 'Her tetikleme seti için %CATEGORY% kategorisindeki ürünlerden %TARGET% adete indirim uygulanır. Örnek: Tetikleyici %TRIGGER%, hedef %TARGET% ise → Her %TRIGGER% tetiklemede bu kategoriden %TARGET% adete indirim yapılır.', 'kns-dynamic-discounts-for-woocommerce' ),
                'target_tooltip_both' => __( 'Her tetikleme seti için %CATEGORY% kategorisindeki seçili hedef ürünlerden %TARGET% adete indirim uygulanır. (Kategori + ürün birlikte değerlendirilir.) Örnek: Tetikleyici %TRIGGER%, hedef %TARGET% ise → Her %TRIGGER% tetiklemede bu listedeki ürünlerden %TARGET% adete indirim yapılır.', 'kns-dynamic-discounts-for-woocommerce' ),
                'target_tooltip_default' => __( 'Hedef kapsamı seçiniz: Kategori ve/veya ürün. En az biri gereklidir.', 'kns-dynamic-discounts-for-woocommerce' ),
                'invalid_trigger_quantity' => __( 'Tetikleyici miktar en az 1 olmalı.', 'kns-dynamic-discounts-for-woocommerce' ),
                'invalid_target_quantity' => __( 'Hedef miktar en az 1 olmalı.', 'kns-dynamic-discounts-for-woocommerce' ),
                'save_rules_first'       => __( 'Lütfen önce kuralları bir kez kaydedin.', 'kns-dynamic-discounts-for-woocommerce' ),
                'total_usage'            => __( 'Toplam Kullanım: %d', 'kns-dynamic-discounts-for-woocommerce' ),
                'limits_updated'         => __( 'Limit ayarları güncellendi. Değişiklikleri kalıcı yapmak için "Kuralları Kaydet" butonuna tıklayın.', 'kns-dynamic-discounts-for-woocommerce' ),
                'invalid_limits_relation'=> __( 'Toplam kullanım limiti, müşteri başına kullanım limitinden küçük olamaz.', 'kns-dynamic-discounts-for-woocommerce' ),
                'campaign_updated'       => __( 'Kampanya ayarları güncellendi. Değişiklikleri kalıcı yapmak için "Kuralları Kaydet" butonuna tıklayın.', 'kns-dynamic-discounts-for-woocommerce' ),
                'messages_updated'       => __( 'Mesaj ayarları güncellendi. Değişiklikleri kalıcı yapmak için "Kuralları Kaydet" butonuna tıklayın.', 'kns-dynamic-discounts-for-woocommerce' ),
                'campaign_switch_confirm' => __( 'Kampanya türünü değiştirirseniz bu kampanyaya ait girdiğiniz veriler ve mesaj yapılandırmaları silinecek. Devam etmek istiyor musunuz?', 'kns-dynamic-discounts-for-woocommerce' ),
                'campaign_switched_cleared' => __( 'Kampanya türü değiştirildi. Önceki kampanyaya ait alanlar ve mesajlar temizlendi.', 'kns-dynamic-discounts-for-woocommerce' ),
                'rule_type_switch_confirm' => __( 'Kural tipini değiştirirseniz özel kampanya verileri silinecek. Devam etmek istiyor musunuz?', 'kns-dynamic-discounts-for-woocommerce' ),
                'normalized_min_max'     => __( 'Bazı satırlarda Min > Max girilmişti; değerler otomatik olarak düzeltildi.', 'kns-dynamic-discounts-for-woocommerce' ),
                'no_group'               => __( 'Grup Yok', 'kns-dynamic-discounts-for-woocommerce' ),
                'product_fallback_name'  => __( 'Ürün #%d', 'kns-dynamic-discounts-for-woocommerce' ),
                'customer_fallback_name' => __( 'Kullanıcı #%d', 'kns-dynamic-discounts-for-woocommerce' ),
                'percent'                => __( '%', 'kns-dynamic-discounts-for-woocommerce' ),
                'amount'                 => __( 'Tutar', 'kns-dynamic-discounts-for-woocommerce' ),
                'percentage'             => __( 'Yüzde', 'kns-dynamic-discounts-for-woocommerce' ),
                // Admin UI'de gösterilecek para birimi sembolü: öncelik mağaza para birimi
                'currency'               => html_entity_decode(
                                                function_exists('get_woocommerce_currency_symbol')
                                                    ? get_woocommerce_currency_symbol()
                                                    : KNSDD_Utils::get_currency_symbol_for_locale( KNSDD_I18n::determine_locale() ),
                                                ENT_QUOTES | ENT_HTML5,
                                                'UTF-8'
                                            ),
                'network_error'          => __( 'Sunucu ile iletişim kurulamadı. Lütfen internet bağlantınızı kontrol edin.', 'kns-dynamic-discounts-for-woocommerce' ),
                'cart_total_discount'    => __( 'Sepet Tutarına Göre İndirim', 'kns-dynamic-discounts-for-woocommerce' ),
                'min_cart_total_label'   => __( 'Minimum Sepet Tutarı', 'kns-dynamic-discounts-for-woocommerce' ),
                'discount_type_label'    => __( 'İndirim Türü', 'kns-dynamic-discounts-for-woocommerce' ),
                'discount_amount_label'  => __( 'İndirim Değeri', 'kns-dynamic-discounts-for-woocommerce' ),
                // Tier group limit messages
                'tier_group_detected_title' => __( '"%s" için Kademeli İndirim Tespit Edildi: %d kademe', 'kns-dynamic-discounts-for-woocommerce' ),
                'tier_group_limits_shared'  => __( 'Toplam kullanım ve müşteri başına kullanım limitleri, tüm kademeler için ortak olarak uygulanır.', 'kns-dynamic-discounts-for-woocommerce' ),
                'limits_updated_for_tiers'  => __( 'Limitler %d kademe için güncellendi. Değişiklikleri kalıcı yapmak için "Kuralları Kaydet" butonuna tıklayın.', 'kns-dynamic-discounts-for-woocommerce' ),
                'and_x_others'              => __( 've %d diğer ürün', 'kns-dynamic-discounts-for-woocommerce' ),
                'this_rule'                 => __( 'Bu kural', 'kns-dynamic-discounts-for-woocommerce' ),
                // Icon picker & messages UI (new)
                'label_icon_package'     => __( 'İkon Paketi', 'kns-dynamic-discounts-for-woocommerce' ),
                'label_select'           => __( 'Seç', 'kns-dynamic-discounts-for-woocommerce' ),
                'label_icon_enabled'     => __( 'İkon kullan', 'kns-dynamic-discounts-for-woocommerce' ),
                'label_icon_color'       => __( 'İkon rengi', 'kns-dynamic-discounts-for-woocommerce' ),
                'label_icon_position'    => __( 'İkon pozisyonu', 'kns-dynamic-discounts-for-woocommerce' ),
                'option_position_before' => __( 'Önce', 'kns-dynamic-discounts-for-woocommerce' ),
                'option_position_after'  => __( 'Sonra', 'kns-dynamic-discounts-for-woocommerce' ),
                'label_icon_size'        => __( 'İkon boyutu', 'kns-dynamic-discounts-for-woocommerce' ),
                'option_size_sm'         => __( 'Küçük', 'kns-dynamic-discounts-for-woocommerce' ),
                'option_size_md'         => __( 'Orta', 'kns-dynamic-discounts-for-woocommerce' ),
                'option_size_lg'         => __( 'Büyük', 'kns-dynamic-discounts-for-woocommerce' ),
                'picker_title'           => __( 'İkon Seç', 'kns-dynamic-discounts-for-woocommerce' ),
                // BOGO mesaj metinleri
                'bogo_trigger_message_tab' => __( 'Tetikleyici Ürün Mesajı', 'kns-dynamic-discounts-for-woocommerce' ),
                'bogo_target_message_tab'  => __( 'Hedef Ürün Mesajı', 'kns-dynamic-discounts-for-woocommerce' ),
                'bogo_trigger_message_desc' => __( 'Bu mesaj, kampanyayı tetikleyen ürünlerin sayfasında gösterilir.', 'kns-dynamic-discounts-for-woocommerce' ),
                'bogo_target_message_desc'  => __( 'Bu mesaj, indirim alan ürünlerin sayfasında gösterilir.', 'kns-dynamic-discounts-for-woocommerce' ),
                'bogo_overlap_title'        => __( 'Çakışma Durumunda:', 'kns-dynamic-discounts-for-woocommerce' ),
                'bogo_overlap_info'         => __( 'Bir ürün hem tetikleyici hem hedefte ise, hedef mesajı öncelikli gösterilir.', 'kns-dynamic-discounts-for-woocommerce' ),
                // Kampanya Türü Kısıtlamaları
                'special_campaign_limit_reached' => __( 'Özel kampanya gruplarında en fazla 1 kural eklenebilir.', 'kns-dynamic-discounts-for-woocommerce' ),
                'free_rules_limit_reached' => sprintf(
                    __( 'Ücretsiz versiyonda grup başına maksimum %d kural oluşturabilirsiniz. Daha fazla kural için Pro sürüme geçin.', 'kns-dynamic-discounts-for-woocommerce' ),
                    KNSDD_License::get_max_rules_per_group()
                ),
                'upgrade_to_pro_rocket' => __( '🚀 Pro Sürüme Geç', 'kns-dynamic-discounts-for-woocommerce' ),
                'wrong_rule_type_for_group_fixed' => __( 'Bu grup sadece Sabit İndirim (Miktar İndirimi) kabul eder.', 'kns-dynamic-discounts-for-woocommerce' ),
                'wrong_rule_type_for_group_special' => __( 'Bu grup sadece Özel Kampanya kabul eder.', 'kns-dynamic-discounts-for-woocommerce' ),
                'not_available_in_this_group' => __( 'Bu grupta kullanılamaz', 'kns-dynamic-discounts-for-woocommerce' ),
                'rule_type_badge_fixed' => __( 'Sabit İndirim', 'kns-dynamic-discounts-for-woocommerce' ),
                'messages_text_required' => __( 'Sepet/Ödeme mesaj alanı boş olamaz. Lütfen bir metin girin veya tüm gösterim tiklerini kaldırın.', 'kns-dynamic-discounts-for-woocommerce' ),
                'invalid_color_hex'      => __( 'Geçersiz renk değeri. Lütfen #RGB veya #RRGGBB biçiminde girin.', 'kns-dynamic-discounts-for-woocommerce' ),
                'invalid_icon_key'       => __( 'Geçersiz ikon anahtarı. Lütfen listeden bir ikon seçin.', 'kns-dynamic-discounts-for-woocommerce' ),
                'rule_type_badge_special' => __( 'Özel Kampanya', 'kns-dynamic-discounts-for-woocommerce' ),
            ),
        ) );
        
        // Ürün ve kategori cache'lerini oluştur
        $this->build_product_category_caches();
    }
    
    private function build_product_category_caches() {
        $groups = KNSDD_Data::get_groups();
        $product_cache = [];
        $category_cache = [];
        
        foreach ( $groups as $group ) {
            $rules = KNSDD_Data::get_rules_for_group( $group );
            foreach ( $rules as $rule ) {
                // BOGO kampanyalarından ürün ID'lerini topla
                if ( isset( $rule['campaign_type'] ) && $rule['campaign_type'] === 'buy_x_get_y_discount' ) {
                    if ( ! empty( $rule['trigger_products'] ) && is_array( $rule['trigger_products'] ) ) {
                        foreach ( $rule['trigger_products'] as $pid ) {
                            if ( ! isset( $product_cache[ $pid ] ) ) {
                                $product = wc_get_product( $pid );
                                if ( $product ) {
                                    $product_cache[ $pid ] = $product->get_name();
                                }
                            }
                        }
                    }
                    if ( ! empty( $rule['target_products'] ) && is_array( $rule['target_products'] ) ) {
                        foreach ( $rule['target_products'] as $pid ) {
                            if ( ! isset( $product_cache[ $pid ] ) ) {
                                $product = wc_get_product( $pid );
                                if ( $product ) {
                                    $product_cache[ $pid ] = $product->get_name();
                                }
                            }
                        }
                    }
                    // Kategorileri topla
                    if ( ! empty( $rule['trigger_category'] ) ) {
                        $cat_id = absint( $rule['trigger_category'] );
                        if ( ! isset( $category_cache[ $cat_id ] ) ) {
                            $term = get_term( $cat_id, 'product_cat' );
                            if ( $term && ! is_wp_error( $term ) ) {
                                $category_cache[ $cat_id ] = $term->name;
                            }
                        }
                    }
                    if ( ! empty( $rule['target_category'] ) ) {
                        $cat_id = absint( $rule['target_category'] );
                        if ( ! isset( $category_cache[ $cat_id ] ) ) {
                            $term = get_term( $cat_id, 'product_cat' );
                            if ( $term && ! is_wp_error( $term ) ) {
                                $category_cache[ $cat_id ] = $term->name;
                            }
                        }
                    }
                }
            }
        }
        
        // JavaScript'e gönder
        wp_add_inline_script( 'knsdd-rules-render', 
            'window.knsddProductCache = ' . wp_json_encode( $product_cache ) . ';' .
            'window.knsddCategoryCache = ' . wp_json_encode( $category_cache ) . ';',
            'before'
        );
    }

    private function get_product_categories() {
        $cats = []; $terms = get_terms( [ 'taxonomy' => 'product_cat', 'hide_empty' => false ] );
        if ( ! is_wp_error( $terms ) ) { foreach ( $terms as $term ) { $cats[] = [ 'id' => $term->term_id, 'name' => $term->name ]; } }
        return $cats;
    }

    public function render_page() {
        $has_groups = ! empty( KNSDD_Data::get_groups() );
        $style_if_no_groups = ! $has_groups ? 'style="display:none;"' : '';
        
        // Flash sorununu önle: Özel kampanyada Kural Ekle butonunu gizli başlat
        $hide_add_button = '';
        if ( isset( $_GET['group'] ) ) {
            $selected_group = trim( wp_unslash( $_GET['group'] ) );
            $group_rule_type = KNSDD_Data::get_group_rule_type( $selected_group );
            if ( $group_rule_type === 'special_campaign' ) {
                $hide_add_button = 'style="display:none;"';
            }
        }
        ?>
        <div class="wrap">
            <h1><?php esc_html_e( 'Kural Yönetimi', 'kns-dynamic-discounts-for-woocommerce' ); ?></h1>
            
            <div id="knsdd-rule-management" class="knsdd-card" data-has-groups="<?php echo $has_groups ? '1' : '0'; ?>">
                <div class="knsdd-form-inline">
                    <label for="knsdd-select-group" style="margin-right: 10px;"><strong><?php esc_html_e( 'Yönetilecek Grubu Seçin:', 'kns-dynamic-discounts-for-woocommerce' ); ?></strong></label>
                    <select id="knsdd-select-group"></select>
                </div>
                
                <hr <?php echo $style_if_no_groups; ?> >

                <div class="knsdd-rules-container" <?php echo $style_if_no_groups; ?>>
                    <table class="widefat striped" id="knsdd-rules-table">
                        <thead>
                            <tr>
                                <th class="knsdd-rule-type-column"><?php esc_html_e( 'Kampanya Türü', 'kns-dynamic-discounts-for-woocommerce' ); ?></th>
                                <th><?php esc_html_e( 'Kategori', 'kns-dynamic-discounts-for-woocommerce' ); ?></th>
                                <th><?php esc_html_e( 'Ürün', 'kns-dynamic-discounts-for-woocommerce' ); ?></th>
                                <th><?php esc_html_e( 'Min', 'kns-dynamic-discounts-for-woocommerce' ); ?></th>
                                <th><?php esc_html_e( 'Max', 'kns-dynamic-discounts-for-woocommerce' ); ?></th>
                                <th><?php esc_html_e( 'Müşteri Koşulları', 'kns-dynamic-discounts-for-woocommerce' ); ?></th>
                                <th><?php esc_html_e( 'Geçerli Müşteriler', 'kns-dynamic-discounts-for-woocommerce' ); ?></th>
                                <th class="knsdd-actions-column"><?php esc_html_e( 'İşlemler', 'kns-dynamic-discounts-for-woocommerce' ); ?></th>
                            </tr>
                        </thead>
                        <tbody id="knsdd-rules-tbody"></tbody>
                    </table>
                </div>
                <p id="knsdd-rules-actions" <?php echo $style_if_no_groups; ?>>
                    <button class="button" id="knsdd-add-rule" <?php echo $hide_add_button; ?>><?php esc_html_e( 'Kural Ekle', 'kns-dynamic-discounts-for-woocommerce' ); ?></button>
                    <button class="button button-primary" id="knsdd-save-rules"><?php esc_html_e( 'Kuralları Kaydet', 'kns-dynamic-discounts-for-woocommerce' ); ?></button>
                </p>
                <div id="knsdd-no-group-message" <?php if ($has_groups) { echo 'style="display:none;"'; } ?>>
                    <p><strong><?php esc_html_e( 'Yönetilecek kural bulunamadı. Lütfen önce Grup Yönetimi sayfasından bir grup oluşturun.', 'kns-dynamic-discounts-for-woocommerce' ); ?></strong></p>
                </div>
            </div>
        </div>
        
        <?php
        // Modals (Açılır Pencereler)
        include_once __DIR__ . '/template-parts/modal-campaign.php';
        include_once __DIR__ . '/template-parts/modal-messages.php';
    }
}
