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

class KNSDD_Message_Renderer {
    /** @var KNSDD_Icon_Renderer */
    private $icon_renderer;

    public function __construct( $icon_renderer = null ) {
        $this->icon_renderer = $icon_renderer instanceof KNSDD_Icon_Renderer ? $icon_renderer : new KNSDD_Icon_Renderer();
    }

    public function render_messages( $messages ) {
        if ( empty( $messages ) ) {
            return;
        }
        echo '<div class="knsdd-frontend-messages">';
        foreach ( $messages as $message ) {
            $classes = array( 'knsdd-message-item' );
            $inline_style = '';
            if ( ! empty( $message['color'] ) ) {
                $inline_style .= 'color:' . esc_attr( $message['color'] ) . ';';
            }
            echo '<div class="' . esc_attr( implode( ' ', $classes ) ) . '" style="' . esc_attr( $inline_style ) . '">';
            // Icon before
            if ( ! empty( $message['icon']['enabled'] ) && $message['icon']['position'] === 'before' ) {
                $this->icon_renderer->render_icon( $message['icon'] );
            }
            $text_content = esc_html( $message['text'] );
            if ( ! empty( $message['highlight'] ) ) {
                $text_content = '<strong>' . $text_content . '</strong>';
            }
            echo $text_content;
            // Icon after
            if ( ! empty( $message['icon']['enabled'] ) && $message['icon']['position'] === 'after' ) {
                $this->icon_renderer->render_icon( $message['icon'] );
            }
            echo '</div>';
        }
        echo '</div>';
    }

    /**
     * Düz metin olarak render (tema uyarı kutusu olmadan)
     */
    public function render_plain_text_messages( $messages ) {
        if ( empty( $messages ) ) {
            return;
        }
        echo '<div class="knsdd-inline-text">';
        foreach ( $messages as $message ) {
            $style = '';
            if ( ! empty( $message['color'] ) ) $style .= 'color:' . esc_attr( $message['color'] ) . ';';
            
            // İkon pozisyonu için data attribute
            $icon_position = '';
            if ( ! empty( $message['icon']['enabled'] ) && ! empty( $message['icon']['position'] ) ) {
                $icon_position = ' data-icon-position="' . esc_attr( $message['icon']['position'] ) . '"';
            }
            
            echo '<span class="knsdd-message-chunk" style="' . esc_attr( $style ) . '"' . $icon_position . '>';
            if ( ! empty( $message['icon']['enabled'] ) && $message['icon']['position'] === 'before' ) {
                $this->icon_renderer->render_icon( $message['icon'] );
                echo ' ';
            }
            $text_content = esc_html( $message['text'] );
            if ( ! empty( $message['highlight'] ) ) {
                $text_content = '<strong>' . $text_content . '</strong>';
            }
            echo $text_content;
            if ( ! empty( $message['icon']['enabled'] ) && $message['icon']['position'] === 'after' ) {
                echo ' ';
                $this->icon_renderer->render_icon( $message['icon'] );
            }
            echo '</span> ';
        }
        echo '</div>';
    }

    /**
     * YENİ: WooCommerce native notification sistemi kullanarak mesajları render eder.
     * Tema renklerini kullanır, ıkon desteği sağlar.
     */
    public function render_wc_notices( $messages ) {
        // Önce eski KNSDD uyarılarını temizle (kalıcı görünme sorunlarını önler)
        if ( function_exists( 'wc_get_notices' ) && function_exists( 'wc_set_notices' ) ) {
            $this->purge_knsdd_notices();
        }

        if ( empty( $messages ) ) {
            return;
        }
        
        // WooCommerce native notification sistemi mevcut mu?
        if ( ! function_exists( 'wc_add_notice' ) ) {
            // Fallback: kendi uyarı kutumuz ile göster
            $this->render_custom_checkout_notices( $messages );
            return;
        }

        foreach ( $messages as $message ) {
            // Mesaj içeriğini hazırla (ıkon dahil)
            $notice_content = $this->format_notice_content( $message );
            
            // Mesaj tipini belirle (tema renklerini kullanmak için)
            $notice_type = $this->determine_notice_type( $message );
            
            // WooCommerce native notification sistemi ile ekle
            wc_add_notice( $notice_content, $notice_type );
        }
    }

    /**
     * KNSDD tarafından eklenmiş WC uyarılarını temizler.
     * Diğer eklenti/temaların uyarılarına dokunmaz.
     */
    private function purge_knsdd_notices() {
        $all = wc_get_notices();
        if ( empty( $all ) || ! is_array( $all ) ) { return; }
        $changed = false;
        foreach ( $all as $type => $notices ) {
            if ( empty( $notices ) || ! is_array( $notices ) ) { continue; }
            $filtered = array();
            foreach ( $notices as $n ) {
                $text = isset( $n['notice'] ) ? (string) $n['notice'] : '';
                if ( strpos( $text, 'data-knsdd-notice="1"' ) !== false ) {
                    $changed = true; // bizim uyarımız: atla
                    continue;
                }
                $filtered[] = $n;
            }
            $all[ $type ] = $filtered;
        }
        if ( $changed ) {
            wc_set_notices( $all );
        }
    }

    /**
     * YENİ: İkon ve metni içeren notice içeriğini formatlar.
     */
    private function format_notice_content( $message ) {
        $content = '';
        
        // İkon before
        if ( ! empty( $message['icon']['enabled'] ) && $message['icon']['position'] === 'before' ) {
            $content .= $this->icon_renderer->get_icon_html( $message['icon'] ) . ' ';
        }
        
        // Mesaj metni
        $text_content = esc_html( $message['text'] );
        
        // Vurgu uygula
        if ( ! empty( $message['highlight'] ) ) {
            $text_content = '<strong>' . $text_content . '</strong>';
        }
        
        // Özel renk uygula (eğer belirtilmişse)
        if ( ! empty( $message['color'] ) ) {
            $text_content = '<span style="color: ' . esc_attr( $message['color'] ) . ';">' . $text_content . '</span>';
        }
        
        // Kendi işaretçimiz ile sarmala (admin'deki .knsdd-notice flex stiline çakışmaması için farklı sınıf kullan)
        $content .= '<span class="knsdd-notice-text" data-knsdd-notice="1">' . $text_content . '</span>';
        
        // İkon after
        if ( ! empty( $message['icon']['enabled'] ) && $message['icon']['position'] === 'after' ) {
            $content .= ' ' . $this->icon_renderer->get_icon_html( $message['icon'] );
        }
        
        return $content;
    }

    /**
     * YENİ: Mesaj için uygun WooCommerce notice tipini belirler.
     * Tema renklerini kullanmak için.
     */
    private function determine_notice_type( $message ) {
        // Varsayılan: başarı mesajı (promo/indirim mesajları olumlu)
        return 'success';
        
        // Gelecekte daha sofistike mantık eklenebilir:
        // - Mesaj içeriğine göre analiz
        // - İkon tipine göre kategorilendirme
        // - Kullanıcı ayarlarına göre özelleştirme
    }

    /**
     * Özel ödeme sayfası uyarı kutusu render eder (tema bağımsız, tema renklerini kullanır)
     */
    public function render_custom_checkout_notices( $messages ) {
        if ( empty( $messages ) ) {
            return;
        }
        
        // Tema renklerini kullan - sadece yapısal stil + sol hizalama
        echo '<div class="knsdd-checkout-notices">';
        
        foreach ( $messages as $message ) {
            $content = '';
            
            // İkon before
            if ( ! empty( $message['icon']['enabled'] ) && $message['icon']['position'] === 'before' ) {
                $content .= $this->icon_renderer->get_icon_html( $message['icon'] ) . ' ';
            }
            
            // Mesaj metni
            $text_content = esc_html( $message['text'] );
            if ( ! empty( $message['highlight'] ) ) {
                $text_content = '<strong>' . $text_content . '</strong>';
            }
            if ( ! empty( $message['color'] ) ) {
                $text_content = '<span style="color: ' . esc_attr( $message['color'] ) . ';">' . $text_content . '</span>';
            }
            
            $content .= $text_content;
            
            // İkon after
            if ( ! empty( $message['icon']['enabled'] ) && $message['icon']['position'] === 'after' ) {
                $content .= ' ' . $this->icon_renderer->get_icon_html( $message['icon'] );
            }
            
            echo '<div class="knsdd-inline-text">' . $content . '</div>';
        }
        
        echo '</div>';
    }

    /**
     * Inline ödeme sayfası uyarıları render eder (sade, tema renklerini kullanır)
     */
    public function render_inline_checkout_notices( $messages ) {
        if ( empty( $messages ) ) {
            return;
        }
        
        // Tema renklerini kullan - sadece minimal çerçeve + sol hizalama
        echo '<div class="knsdd-inline-checkout-notices">';
        
        foreach ( $messages as $message ) {
            $content = '';
            
            // İkon before
            if ( ! empty( $message['icon']['enabled'] ) && $message['icon']['position'] === 'before' ) {
                $content .= $this->icon_renderer->get_icon_html( $message['icon'] ) . ' ';
            }
            
            // Mesaj metni
            $text_content = esc_html( $message['text'] );
            if ( ! empty( $message['highlight'] ) ) {
                $text_content = '<strong>' . $text_content . '</strong>';
            }
            if ( ! empty( $message['color'] ) ) {
                $text_content = '<span style="color: ' . esc_attr( $message['color'] ) . ';">' . $text_content . '</span>';
            }
            
            $content .= $text_content;
            
            // İkon after
            if ( ! empty( $message['icon']['enabled'] ) && $message['icon']['position'] === 'after' ) {
                $content .= ' ' . $this->icon_renderer->get_icon_html( $message['icon'] );
            }
            
            echo '<p class="knsdd-inline-text">' . $content . '</p>';
        }
        
        echo '</div>';
    }

    /**
     * Temiz tablo satırı olarak uyarı render eder (minimalist, tema renklerini kullanır)
     */
    public function render_clean_table_notices( $messages ) {
        if ( empty( $messages ) ) {
            return;
        }

        // Tipografiyi temaya bırak; inline padding/align kullanma
        echo '<tr class="knsdd-clean-notice-row"><td colspan="2">';

        foreach ( $messages as $message ) {
            $content = '';

            // İkon before
            if ( ! empty( $message['icon']['enabled'] ) && $message['icon']['position'] === 'before' ) {
                $content .= $this->icon_renderer->get_icon_html( $message['icon'] ) . ' ';
            }

            // Mesaj metni (vurgu: <strong>, renk: inline color)
            $text_content = esc_html( $message['text'] );
            if ( ! empty( $message['highlight'] ) ) {
                $text_content = '<strong>' . $text_content . '</strong>';
            }
            if ( ! empty( $message['color'] ) ) {
                $text_content = '<span style="color: ' . esc_attr( $message['color'] ) . ';">' . $text_content . '</span>';
            }
            $content .= $text_content;

            // İkon after
            if ( ! empty( $message['icon']['enabled'] ) && $message['icon']['position'] === 'after' ) {
                $content .= ' ' . $this->icon_renderer->get_icon_html( $message['icon'] );
            }

            echo '<div class="knsdd-inline-text">' . $content . '</div>';
        }

        echo '</td></tr>';
    }

    /**
     * Per-line mesaj için HTML döndürür (echo yapmaz). Ürün adının altına eklenecek küçük blok.
     */
    public function get_line_message_html( $message ) {
        if ( empty( $message ) || empty( $message['text'] ) ) { return ''; }

        $classes = array( 'knsdd-line-message' );
        // Bold sınıfını eklemeyelim; tema <strong> için kendi ağırlığını uygulasın
        $style = '';
        if ( ! empty( $message['color'] ) ) { $style .= 'color:' . esc_attr( $message['color'] ) . ';'; }

        $before = '';
        $after  = '';
        if ( ! empty( $message['icon']['enabled'] ) && ! empty( $message['icon']['position'] ) ) {
            $icon_html = $this->icon_renderer->get_icon_html( $message['icon'] );
            if ( $message['icon']['position'] === 'before' ) { $before = $icon_html . ' '; }
            if ( $message['icon']['position'] === 'after' )  { $after  = ' ' . $icon_html; }
        }

        $text = esc_html( $message['text'] );
        if ( ! empty( $message['highlight'] ) ) {
            $text = '<strong>' . $text . '</strong>';
        }

        $html  = '<div class="' . esc_attr( implode( ' ', $classes ) ) . '" style="' . esc_attr( $style ) . '">';
        $html .= $before . $text . $after;
        $html .= '</div>';
        return $html;
    }

    /**
     * Per-line mesajı doğrudan echo eder.
     */
    public function render_line_message( $message ) {
        $html = $this->get_line_message_html( $message );
        if ( $html ) { echo $html; }
    }
}
// Mesajların HTML çıktıları (blok/inline/tablo) buraya taşınacak
