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

/**
 * KNSDD_Tier_Table_Renderer
 *
 * Kademe tablosu için erişilebilir ve tema-bağımsız HTML üretir.
 * Varsayılan olarak eşik (max) etiketli sade görünüm kullanılır; gerekli satırlarda aralık etiketi (min–max) düşer.
 */
class KNSDD_Tier_Table_Renderer {

    /**
     * @param array $tiers [ [min, max, type, value], ... ]
     * @param array $opts  [ 'wrap_id' => string, 'product_id' => int ]
     */
    public function render( array $tiers, array $opts = [] ) {
        $wrap_id    = isset($opts['wrap_id']) ? sanitize_html_class($opts['wrap_id']) : '';
        $product_id = isset($opts['product_id']) ? absint($opts['product_id']) : 0;

        if ( empty( $tiers ) ) { return; }

        $heading = apply_filters( 'knsdd_tier_table_heading', __( 'Kademe İndirimi', 'kns-dynamic-discounts-for-woocommerce' ) );

        echo '<div class="knsdd-tier-table-wrap"' . ( $wrap_id ? ' id="' . esc_attr($wrap_id) . '"' : '' ) . ' data-product-id="' . esc_attr( $product_id ) . '">';
        echo '<div class="knsdd-tier-table__header">' . esc_html( $heading ) . '</div>';

        echo '<table class="knsdd-tier-table" role="table">';
        echo '<thead class="knsdd-tier-table__head"><tr>';
        echo '<th scope="col" class="knsdd-tier-table__col knsdd-tier-table__col-qty">' . esc_html__( 'Adet', 'kns-dynamic-discounts-for-woocommerce' ) . '</th>';
        echo '<th scope="col" class="knsdd-tier-table__col knsdd-tier-table__col-discount">' . esc_html__( 'İndirim', 'kns-dynamic-discounts-for-woocommerce' ) . '</th>';
        echo '</tr></thead>';
        echo '<tbody class="knsdd-tier-table__body">';

        foreach ( $tiers as $t ) {
            $min   = isset($t['min']) ? (int)$t['min'] : 0;
            $max   = isset($t['max']) ? (int)$t['max'] : 0; // 0 => sonsuz
            $type  = isset($t['type']) ? $t['type'] : 'percent';
            $value = isset($t['value']) ? (float)$t['value'] : 0.0;

            $qty_label = self::format_qty_label( $min, $max );
            $disc_label = self::format_discount_label( $type, $value );

            echo '<tr class="knsdd-tier-table__row">';
            echo '<td class="knsdd-tier-table__cell knsdd-tier-table__cell-qty">' . esc_html( $qty_label ) . '</td>';
            echo '<td class="knsdd-tier-table__cell knsdd-tier-table__cell-discount">' . esc_html( $disc_label ) . '</td>';
            echo '</tr>';
        }

        echo '</tbody>';
        echo '</table>';
        echo '</div>';
    }

    private static function format_qty_label( $min, $max ) {
        // Eşik odaklı gösterim: 2, 3, 4+
        // Eğer aralık birden çok değeri kapsıyorsa: 2–4
        if ( $min > 0 && $max > 0 ) {
            if ( $min === $max ) {
                return (string) $max; // tek değerli eşik
            }
            // aralık
            return sprintf( '%d–%d', $min, $max );
        }
        if ( $max > 0 ) {
            // 0–max gibi normalize edilen verilerde min=0 olabilir → yine eşik olarak max'ı göster
            return (string) $max;
        }
        // sonsuz aralık (min+)
        // + için kısa açıklama title/aria ile verilebilir (erişilebilirlik):
        return sprintf( __( '%d+', 'kns-dynamic-discounts-for-woocommerce' ), max(1, (int)$min) );
    }

    private static function format_discount_label( $type, $value ) {
        if ( $type === 'fixed' ) {
            // WooCommerce para birimi sembolü ile biçimlendirme
            if ( function_exists('wc_price') ) {
                return wp_strip_all_tags( wc_price( $value ) );
            }
            return number_format_i18n( $value, 2 );
        }
        // percent
        // Yüzde işaretini yerelleştirilmiş formatla göster (örn: %10)
        $val = rtrim( rtrim( sprintf('%.2f', $value), '0' ), '.' );
        return '%' . $val;
    }
}
