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

/**
 * KNSDD_Utils Class
 *
 * Eklenti için genel amaçlı yardımcı fonksiyonları içerir.
 */
class KNSDD_Utils {

    /**
     * Eklenti devre dışı bırakıldığında çalışır.
     */
    public static function deactivate() {
        // Gelecekteki temizleme işlemleri için boş bırakıldı.
    }

    /**
     * Verilen tarih string'ini Y-m-d formatına dönüştürür.
     */
    public static function ensure_iso_date( $date_string ) {
        if ( empty( $date_string ) ) { return ''; }
        if ( preg_match( '/^\d{4}-\d{2}-\d{2}$/', $date_string ) ) { return $date_string; }
        try {
            $date = new DateTime( $date_string );
            return $date->format( 'Y-m-d' );
        } catch ( Exception $e ) {
            return '';
        }
    }

    /**
     * Bir kural grubunun başlangıç ve bitiş tarihine göre durumunu döndürür.
     */
    public static function get_group_status_info( $dates, $paused = false ) {
        $start_str = isset( $dates['start'] ) ? self::ensure_iso_date($dates['start']) : '';
        $end_str   = isset( $dates['end'] ) ? self::ensure_iso_date($dates['end']) : '';

        if ( empty( $start_str ) || empty( $end_str ) ) {
            return [ 'status' => 'closed', 'text' => __( 'Tarih Belirtilmedi', 'kns-dynamic-discounts-for-woocommerce' ), 'className' => 'status-incomplete' ];
        }

        try {
            $today = new DateTime( 'now', wp_timezone() );
            $today->setTime( 0, 0, 0 );
            $start_date = new DateTime( $start_str, wp_timezone() );
            $start_date->setTime( 0, 0, 0 );
            $end_date = new DateTime( $end_str, wp_timezone() );
            $end_date->setTime( 0, 0, 0 );

            if ( $today >= $start_date && $today <= $end_date ) {
                // Tarih aralığı bugün ise normalde 'open' olur. Paused ise metni 'Manuel Pasif' olarak göster.
                if ( $paused ) {
                    return [ 'status' => 'closed', 'text' => __( 'Manuel Pasif', 'kns-dynamic-discounts-for-woocommerce' ), 'className' => 'status-paused' ];
                }
                return [ 'status' => 'open', 'text' => __( 'Aktif', 'kns-dynamic-discounts-for-woocommerce' ), 'className' => 'status-active' ];
            } elseif ( $today < $start_date ) {
                // Gelecekte başlayacaksa 'Beklemede' kalsın; paused olsa bile metni bastırma.
                return [ 'status' => 'closed', 'text' => __( 'Beklemede', 'kns-dynamic-discounts-for-woocommerce' ), 'className' => 'status-pending' ];
            } else {
                // Süresi bittiyse 'Tamamlandı' kalsın; paused olsa bile metni bastırma.
                return [ 'status' => 'closed', 'text' => __( 'Tamamlandı', 'kns-dynamic-discounts-for-woocommerce' ), 'className' => 'status-expired' ];
            }
        } catch ( Exception $e ) {
            return [ 'status' => 'closed', 'text' => __( 'Geçersiz Tarih', 'kns-dynamic-discounts-for-woocommerce' ), 'className' => 'status-invalid' ];
        }
    }

    /**
     * Kampanya tipine göre çevrilmiş kampanya adını döndürür.
     */
    public static function get_campaign_name_by_type( $type ) {
        switch ( $type ) {
            case 'buy_x_pay_y':
                return __( 'X Al, Y Öde Kampanyası', 'kns-dynamic-discounts-for-woocommerce' );
            case 'nth_percent_off':
                return __( "N. Ürüne İndirim Kampanyası", 'kns-dynamic-discounts-for-woocommerce' );
            case 'cart_total_discount':
                return __( 'Sepet Tutarı İndirimi', 'kns-dynamic-discounts-for-woocommerce' );
            default:
                return __( 'Özel Kampanya', 'kns-dynamic-discounts-for-woocommerce' );
        }
    }

    /**
     * Eklenti tarafından desteklenen dil kodlarını döndürür.
     */
    public static function get_supported_locales() {
        return array(
            'en_US' => 'English',
            'en_GB' => 'English (UK)',
            'tr_TR' => 'Türkçe',
            'es_ES' => 'Español',
            'de_DE' => 'Deutsch',
            'fr_FR' => 'Français',
            'it_IT' => 'Italiano',
        );
    }

    /**
     * Tarayıcının dil tercihini tespit eder.
     */
    public static function detect_browser_locale( $supported_locales = array() ) {
        if ( empty( $supported_locales ) ) {
            $supported_locales = array_keys( self::get_supported_locales() );
        }
        $header = isset( $_SERVER['HTTP_ACCEPT_LANGUAGE'] ) ? wp_unslash( $_SERVER['HTTP_ACCEPT_LANGUAGE'] ) : '';
        if ( empty( $header ) ) {
            return '';
        }

        $parts = explode( ',', $header );
        foreach ( $parts as $part ) {
            $lang = trim( explode( ';', $part )[0] );
            if ( empty( $lang ) ) { continue; }

            $locale_candidate = self::normalize_language_tag_to_locale( $lang );

            if ( in_array( $locale_candidate, $supported_locales, true ) ) {
                return $locale_candidate;
            }

            $short = strtolower( substr( $lang, 0, 2 ) );
            foreach ( $supported_locales as $loc ) {
                if ( strtolower( substr( $loc, 0, 2 ) ) === $short ) {
                    return $loc;
                }
            }
        }

        return '';
    }

    /**
     * Dil etiketini WordPress yerel kod formatına dönüştürür (örn: en-US -> en_US).
     */
    private static function normalize_language_tag_to_locale( $tag ) {
        $tag = str_replace( array( '-', '.' ), array( '_', '_' ), $tag );
        $parts = explode( '_', $tag );
        if ( count( $parts ) === 2 ) {
            return strtolower( $parts[0] ) . '_' . strtoupper( $parts[1] );
        }
        return $tag;
    }

    /**
     * Seçili yerel ayara (locale) göre yalnızca ADMIN UI için para birimi sembolü döndürür.
     * Mağazanın gerçek WooCommerce para birimi ayarını değiştirmez.
     */
    public static function get_currency_symbol_for_locale( $locale ) {
        $map = array(
            'tr_TR' => '₺',
            'en_US' => '$',
            'en_GB' => '£',
            'de_DE' => '€',
            'fr_FR' => '€',
            'it_IT' => '€',
            'es_ES' => '€',
        );
        if ( isset( $map[ $locale ] ) ) {
            return $map[ $locale ];
        }
        // Desteklenmeyen locale için WooCommerce mağaza sembolüne düş.
        return function_exists( 'get_woocommerce_currency_symbol' )
            ? get_woocommerce_currency_symbol()
            : '₺';
    }
}
