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

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

    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 ) {
        // Parent menü kancası değişse bile alt sayfa slug'ı 'knsdd-groups' olduğu sürece assetleri yükle.
        if ( strpos( $hook, 'knsdd-groups' ) === false ) {
            return;
        }
        
        // Stiller - Yerel dosyalar (WordPress.org uyumluluğu)
        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-filters-groups', KNSDD_PLUGIN_URL . 'assets/css/filters-groups.css', array('knsdd-admin-css'), KNSDD_VERSION );

        // Temel Kütüphaneler - Yerel dosyalar
        wp_enqueue_script( 'jquery' );
        wp_enqueue_script( 'flatpickr-js', KNSDD_PLUGIN_URL . 'assets/js/vendor/flatpickr.min.js', array(), '4.6.13', true );
        
        // Dil dosyası (Flatpickr için) - Otomatik yükleme
        KNSDD_Vendor_I18n::enqueue_vendor_locales( false, 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. Grup Sayfası Modülleri (Sırayla)
        $main_deps = array( 'jquery', 'knsdd-admin-common-js' );
        wp_enqueue_script( 'knsdd-groups-state', KNSDD_PLUGIN_URL . 'assets/js/groups/state.js', $main_deps, KNSDD_VERSION, true );
        wp_enqueue_script( 'knsdd-groups-data', KNSDD_PLUGIN_URL . 'assets/js/groups/data.js', array('knsdd-groups-state'), KNSDD_VERSION, true );
        wp_enqueue_script( 'knsdd-groups-render', KNSDD_PLUGIN_URL . 'assets/js/groups/render.js', array('knsdd-groups-data'), KNSDD_VERSION, true );
        wp_enqueue_script( 'knsdd-groups-modal', KNSDD_PLUGIN_URL . 'assets/js/groups/modal.js', array('knsdd-groups-render', 'knsdd-admin-common-js'), KNSDD_VERSION, true );
        $groups_events_ver = file_exists( KNSDD_PLUGIN_DIR . 'assets/js/groups/events.js' ) ? (string) filemtime( KNSDD_PLUGIN_DIR . 'assets/js/groups/events.js' ) : KNSDD_VERSION;
        wp_enqueue_script( 'knsdd-groups-events', KNSDD_PLUGIN_URL . 'assets/js/groups/events.js', array('knsdd-groups-modal', 'knsdd-admin-common-js'), $groups_events_ver, true );
        wp_enqueue_script( 'knsdd-groups-bulk-actions', KNSDD_PLUGIN_URL . 'assets/js/groups/bulk-actions.js', array('knsdd-groups-render'), KNSDD_VERSION, true );
        
        // Toplu İşlemler CSS
        wp_enqueue_style( 'knsdd-bulk-actions', KNSDD_PLUGIN_URL . 'assets/css/bulk-actions.css', array('knsdd-admin-css'), KNSDD_VERSION );
        
        $this->localize_script_data();
    }

    /**
     * Gerekli PHP verilerini JavaScript'e aktarır.
     */
    private function localize_script_data() {
        $groups = KNSDD_Data::get_groups();
        
        // Güvenlik: groups array değilse veya bozuksa düzelt
        if (!is_array($groups)) {
            $groups = [];
            update_option('knsdd_groups', []);
        }
        
        $data = [ 'dates' => [], 'statuses' => [], 'rules' => [], 'paused' => [] ];

        // Cache'den veri çekmeyi dene (1 saat TTL)
        $cache_key = 'knsdd_groups_batch_data';
        $cached_data = get_transient( $cache_key );

        if ( $cached_data !== false && is_array( $cached_data ) ) {
            // Cache'den al
            $data = $cached_data;
        } else {
            // Cache yoksa, tüm veriyi topla
            foreach ( $groups as $group ) {
                // Güvenlik kontrolü: $group string olmalı
                if ( ! is_string( $group ) || empty( $group ) ) {
                    continue;
                }
                
                $dates = KNSDD_Data::get_dates_for_group( $group );
                $data['dates'][ $group ] = $dates;
                $paused = KNSDD_Data::is_group_paused( $group );
                $data['paused'][ $group ] = $paused;
                $data['statuses'][ $group ] = KNSDD_Utils::get_group_status_info( $dates, $paused );
                $data['rules'][ $group ] = KNSDD_Data::get_rules_for_group( $group );
            }

            // Cache'e kaydet (1 saat)
            set_transient( $cache_key, $data, HOUR_IN_SECONDS );
        }

        $plugin_locale = method_exists( 'KNSDD_I18n', 'determine_locale' ) ? KNSDD_I18n::determine_locale() : ( function_exists( 'get_user_locale' ) ? get_user_locale() : get_locale() );
        // Flatpickr için dil kodu (ilk 2 karakter) - İngilizce hariç tüm diller
        $fp_lang = substr( $plugin_locale, 0, 2 );
        $fp_locale = ( $fp_lang !== 'en' ) ? $fp_lang : '';

        // Settings: merge defaults with saved option
        $defaults = array(
            'conflict_action'   => 'revert',
            'inline_warning_ms' => 5000,
            'conflict_scope'    => 'same_rules',
            'date_alt_format'   => 'd.m.Y',
            'validate_same_day' => 1,
            'lock_started_campaigns' => 1,
            'warning_theme'     => 'rose',
            'focus_theme'       => 'amber',
            'warning_location'  => 'inplace',
            'last_highlight_ms' => 3500,
            // Site saat dilimi ve "şimdi" bilgisi (ISO-8601) + hafta başlangıcı (0=PAZ, 1=PZT ...)
            'site_timezone'     => wp_timezone_string(),
            'site_now_iso'      => current_time( 'c' ),
            'week_start'        => (int) get_option( 'start_of_week', 1 ),
            'a11y_alert_role'   => 1,
            'trigger_timing'    => 'realtime',
        );
        $saved = get_option( 'knsdd_global_settings', array() );
        $settings = wp_parse_args( is_array( $saved ) ? $saved : array(), $defaults );

        // 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,
            'page'       => 'groups',
            'settings'   => $settings,
            'date_format' => $this->get_date_format(),
            'i18n'       => array(
                'fp_locale'          => $fp_locale,
                'no_match'           => __( 'Filtre ile eşleşen grup bulunamadı.', 'kns-dynamic-discounts-for-woocommerce' ),
                'no_groups_message'  => __( 'Başlamak için lütfen bir grup oluşturun.', 'kns-dynamic-discounts-for-woocommerce' ),
                'manage_rules'       => __( 'Kuralları Yönet', 'kns-dynamic-discounts-for-woocommerce' ),
                'view_rules'         => __( 'Kuralları Görüntüle', 'kns-dynamic-discounts-for-woocommerce' ),
                'duplicate_group'    => __( 'Grubu Kopyala', 'kns-dynamic-discounts-for-woocommerce' ),
                'edit_group'         => __( 'Grup Adını Düzenle', 'kns-dynamic-discounts-for-woocommerce' ),
                'delete_group'       => __( 'Grubu Sil', 'kns-dynamic-discounts-for-woocommerce' ),
                'start_label'        => __( 'Başlangıç', 'kns-dynamic-discounts-for-woocommerce' ),
                'end_label'          => __( 'Bitiş', 'kns-dynamic-discounts-for-woocommerce' ),
                'error_empty_group'  => __( 'Grup adı boş olamaz.', 'kns-dynamic-discounts-for-woocommerce' ),
                'group_added'        => __( '"%s" grubu eklendi.', 'kns-dynamic-discounts-for-woocommerce' ),
                'duplicated_success' => __( "'%1\$s' grubu '%2\$s' adıyla başarıyla kopyalandı.", 'kns-dynamic-discounts-for-woocommerce' ),
                'deleted_success'    => __( "'%s' grubu silindi.", 'kns-dynamic-discounts-for-woocommerce' ),
                'confirm_duplicate'  => __( "'%s' grubunu ve içerdiği tüm kuralları kopyalamak istediğinize emin misiniz?", 'kns-dynamic-discounts-for-woocommerce' ),
                'confirm_delete'     => __( "'%s' grubunu ve tüm kurallarını silmek istediğinize emin misiniz?", 'kns-dynamic-discounts-for-woocommerce' ),
                'today'              => __( 'Bugün', 'kns-dynamic-discounts-for-woocommerce' ),
                'tomorrow'           => __( 'Yarın', 'kns-dynamic-discounts-for-woocommerce' ),
                'this_week'          => __( 'Bu Hafta', 'kns-dynamic-discounts-for-woocommerce' ),
                'next_week'          => __( 'Gelecek Hafta', 'kns-dynamic-discounts-for-woocommerce' ),
                'this_month'         => __( 'Bu Ay', 'kns-dynamic-discounts-for-woocommerce' ),
                'network_error'      => __( 'Sunucu ile iletişim kurulamadı. Lütfen internet bağlantınızı kontrol edin.', 'kns-dynamic-discounts-for-woocommerce' ),
                'unknown_error'      => __( 'Bilinmeyen bir sunucu hatası oluştu.', 'kns-dynamic-discounts-for-woocommerce' ),
                'status_no_date'     => __( 'Tarih Belirtilmedi', 'kns-dynamic-discounts-for-woocommerce' ),
                'manual_paused'      => __( 'Manuel Pasif', 'kns-dynamic-discounts-for-woocommerce' ),
                'group_name_updated' => __( 'Grup adı güncellendi.', 'kns-dynamic-discounts-for-woocommerce' ),
                'search_placeholder' => __( 'Grup adında ara...', 'kns-dynamic-discounts-for-woocommerce' ),
                'label_status'       => __( 'Durum', 'kns-dynamic-discounts-for-woocommerce' ),
                'label_sort'         => __( 'Sırala:', 'kns-dynamic-discounts-for-woocommerce' ),
                'label_adv'          => __( 'Gelişmiş:', 'kns-dynamic-discounts-for-woocommerce' ),
                'status_all'         => __( 'Tüm Durumlar', 'kns-dynamic-discounts-for-woocommerce' ),
                'status_open'        => __( 'Aktif', 'kns-dynamic-discounts-for-woocommerce' ),
                'status_pending'     => __( 'Beklemede', 'kns-dynamic-discounts-for-woocommerce' ),
                'status_expired'     => __( 'Tamamlandı', 'kns-dynamic-discounts-for-woocommerce' ),
                'status_incomplete'  => __( 'Tarih Belirtilmedi', 'kns-dynamic-discounts-for-woocommerce' ),
                'sort_creation_desc' => __( 'Oluşturulma Tarihi (En Yeni)', 'kns-dynamic-discounts-for-woocommerce' ),
                'sort_creation_asc'  => __( 'Oluşturulma Tarihi (En Eski)', 'kns-dynamic-discounts-for-woocommerce' ),
                'sort_start_asc'     => __( 'Başlangıç Tarihi (En Önce Başlayacak Olan)', 'kns-dynamic-discounts-for-woocommerce' ),
                'sort_start_desc'    => __( 'Başlangıç Tarihi (En Son Başlayacak Olan)', 'kns-dynamic-discounts-for-woocommerce' ),
                'sort_end_asc'       => __( 'Bitiş Tarihi (En Önce Bitecek Olan)', 'kns-dynamic-discounts-for-woocommerce' ),
                'sort_end_desc'      => __( 'Bitiş Tarihi (En Son Bitecek Olan)', 'kns-dynamic-discounts-for-woocommerce' ),
                'sort_all'           => __( 'Tümü', 'kns-dynamic-discounts-for-woocommerce' ),
                'adv_all'            => __( 'Tümü', 'kns-dynamic-discounts-for-woocommerce' ),
                'adv_has_rules'      => __( 'Sadece Kuralı Olanlar', 'kns-dynamic-discounts-for-woocommerce' ),
                'adv_no_rules'       => __( 'Kuralı Olmayanlar', 'kns-dynamic-discounts-for-woocommerce' ),
                'adv_has_special'    => __( 'Özel Kampanya İçerenler', 'kns-dynamic-discounts-for-woocommerce' ),
                'adv_has_standard'   => __( 'Miktar İndirimi İçerenler', 'kns-dynamic-discounts-for-woocommerce' ),
                'adv_has_members_only'=> __( 'Üyelere Özel İndirim İçerenler', 'kns-dynamic-discounts-for-woocommerce' ),
                'adv_has_first_order' => __( 'İlk Sipariş İndirimi İçerenler', 'kns-dynamic-discounts-for-woocommerce' ),
                // Eski anahtar (geriye dönük uyumluluk için bırakıldı)
                'duplicate_group_dates_with_overlap' => __( "Bu tarih aralığı, '%s' grubu ile bire bir aynı kurallar içermektedir. Lütfen değiştirin ya da silin.", 'kns-dynamic-discounts-for-woocommerce' ),
                // Yeni: Tarih eşitliği ve kısmi örtüşme için ayrı mesajlar
                'duplicate_group_dates_equal'   => __( "Bu tarih aralığı, '%s' grubuyla birebir aynı tarih aralığı içermektedir. Aynı kural setleri için tamamen aynı tarih aralığına izin verilmez.", 'kns-dynamic-discounts-for-woocommerce' ),
                'duplicate_group_dates_overlap' => __( "Bu tarih aralığı, '%s' grubuyla aynı tarih aralığı içermektedir. Aynı kural setleri için tarih aralıklarının örtüşmesine izin verilmez.", 'kns-dynamic-discounts-for-woocommerce' ),
                // BOGO çakışma mesajları
                'bogo_cross_group_conflict'     => __( "BOGO çakışması: '%s' grubuyla aynı tetikleyici ürün/kategori kullanılıyor. Aynı tarihlerde aynı tetikleyici farklı gruplarda kullanılamaz.", 'kns-dynamic-discounts-for-woocommerce' ),
                // Toplu İşlemler i18n
                'bulk_no_selection'             => __( 'Lütfen bir işlem ve en az bir grup seçin.', 'kns-dynamic-discounts-for-woocommerce' ),
                'bulk_delete_confirm'           => __( '%d grup silinecek. Emin misiniz?', 'kns-dynamic-discounts-for-woocommerce' ),
                'bulk_error'                    => __( 'İşlem sırasında bir hata oluştu.', 'kns-dynamic-discounts-for-woocommerce' ),
                'bulk_pause_disabled'           => __( 'Sadece aktif veya gelecek gruplar için kullanılabilir', 'kns-dynamic-discounts-for-woocommerce' ),
                'bulk_unpause_disabled'         => __( 'Sadece manuel pasif gruplar için kullanılabilir', 'kns-dynamic-discounts-for-woocommerce' ),
                'processing'                    => __( 'İşleniyor...', 'kns-dynamic-discounts-for-woocommerce' ),
                'apply'                         => __( 'Uygula', 'kns-dynamic-discounts-for-woocommerce' ),
                // Kampanya Türü i18n
                'rule_type_label'               => __( 'Kampanya Türü', 'kns-dynamic-discounts-for-woocommerce' ),
                'rule_type_required'            => __( 'Kural tipi seçimi zorunludur.', 'kns-dynamic-discounts-for-woocommerce' ),
                'rule_type_fixed_discount'      => __( 'Sabit İndirim (Miktar İndirimi)', 'kns-dynamic-discounts-for-woocommerce' ),
                'rule_type_special_campaign'    => __( 'Özel Kampanya', 'kns-dynamic-discounts-for-woocommerce' ),
                'rule_type_tooltip'             => __( 'Sabit İndirim: Sınırsız kademeli indirim kuralı ekleyebilirsiniz. Özel Kampanya: Grup başına tek kampanya (BOGO, Sepet İndirimi vb.).', 'kns-dynamic-discounts-for-woocommerce' ),
                'rule_type_fixed_desc'        => __( 'Kategori/ürün bazlı kademeli indirimler (5+ adet %10, 10+ adet %15 gibi)', 'kns-dynamic-discounts-for-woocommerce' ),
                'rule_type_special_desc'      => __( 'BOGO, Sepet İndirimi, N\'inci Ürün gibi özel kampanyalar. Grup başına tek kural.', 'kns-dynamic-discounts-for-woocommerce' ),
                // JSON Import/Export i18n
                'json_file_required'          => __( 'Lütfen JSON formatında bir dosya seçin.', 'kns-dynamic-discounts-for-woocommerce' ),
                'file_required'               => __( 'Önce bir dosya seçin.', 'kns-dynamic-discounts-for-woocommerce' ),
            ),
            'license' => array(
                'max_groups'    => KNSDD_License::get_max_groups(),
                'upgrade_url'   => KNSDD_License::get_upgrade_url( 'groups' ),
            ),
        ) );
    }
    
    /**
     * Sayfanın HTML içeriğini oluşturur.
     */
    public function render_page() {
        // Sayfa başlığını ve yeni grup ekleme formunu yükle
        include 'template-parts/groups/header.php';

        // Filtreleri ve grup tablosunu yükle
        include 'template-parts/groups/table.php';

        // Modalları yükle
        include 'template-parts/groups/modal-edit.php';

        // Kapanış div'i (header.php'de açılan <div class="wrap"> için)
        echo '</div>'; 
    }

    /**
     * Tarih gösterim formatını ayarlardan al
     */
    private function get_date_format() {
        $options = get_option( 'knsdd_global_settings', array() );
        return isset( $options['date_alt_format'] ) ? $options['date_alt_format'] : 'd.m.Y';
    }
}
