<?php

if (!defined('ABSPATH')) { exit; }

if ( ! class_exists( 'AIEO_Pro_Account_Tab', false ) ) {

class AIEO_Pro_Account_Tab {

    const SHORTCODE    = 'aieo_pro_account';
    const ENDPOINT     = 'pro-account';
    const FLUSH_OPTION = 'aieo_pro_account_rules_v1';

    public function __construct() {
        add_shortcode(self::SHORTCODE, array($this, 'shortcode'));
        add_action('init', array($this, 'add_endpoint'));
        add_filter('query_vars', array($this, 'query_vars'), 0);
        add_filter('woocommerce_account_menu_items', array($this, 'menu_items'));
        add_action('woocommerce_account_' . self::ENDPOINT . '_endpoint', array($this, 'endpoint_content'));
        add_action('wp_enqueue_scripts', array($this, 'enqueue_assets'));
        
        add_action('init', array($this, 'maybe_flush_rules'), 99);
    }

    

    
    public static function pro_role_slugs() {
        if (!class_exists('AIEO_DMM_Settings')) { return array(); }
        $map = AIEO_DMM_Settings::get('gf_role_map', array());
        if (!is_array($map) || empty($map)) { return array(); }
        $slugs = array();
        foreach (array_keys($map) as $slug) {
            $slug = (string) $slug;
            if ($slug !== '') { $slugs[] = $slug; }
        }
        return array_values(array_unique($slugs));
    }

    
    public static function membership_page_id() {
        $id = class_exists('AIEO_DMM_Settings') ? (int) AIEO_DMM_Settings::get('gf_professionals_page_id', 0) : 0;
        if ($id > 0) { return $id; }
        
        $page = get_page_by_path('epaggelmaties-spoudastes');
        return $page ? (int) $page->ID : 0;
    }

    
    public static function membership_url() {
        $id = self::membership_page_id();
        if ($id > 0) {
            $url = get_permalink($id);
            if ($url) { return (string) $url; }
        }
        return home_url();
    }

    

    public function add_endpoint() {
        add_rewrite_endpoint(self::ENDPOINT, EP_ROOT | EP_PAGES);
    }
    public function query_vars($vars) {
        $vars[] = self::ENDPOINT;
        return $vars;
    }
    public function menu_items($items) {
        $logout = isset($items['customer-logout']) ? $items['customer-logout'] : null;
        if ($logout !== null) { unset($items['customer-logout']); }
        $items[self::ENDPOINT] = __('Επαγγελματικός λογαριασμός', 'ai-eshop-optimizer');
        if ($logout !== null) { $items['customer-logout'] = $logout; }
        return $items;
    }
    public function endpoint_content() {
        echo do_shortcode('[' . self::SHORTCODE . ']'); 
    }

    public function maybe_flush_rules() {
        if (get_option(self::FLUSH_OPTION) === 'done') { return; }
        flush_rewrite_rules(false);
        update_option(self::FLUSH_OPTION, 'done', false);
    }

    
    public function enqueue_assets() {
        global $wp_query;
        if (is_admin() || empty($wp_query) || !isset($wp_query->query_vars[self::ENDPOINT])) { return; }
        $rel  = 'assets/css/aieo-push.css';
        $dir  = defined('AIEO_RUNTIME_DIR') ? AIEO_RUNTIME_DIR : WP_PLUGIN_DIR . '/ai-eshop-optimizer-runtime/';
        $uri  = defined('AIEO_RUNTIME_URI') ? AIEO_RUNTIME_URI : plugins_url('ai-eshop-optimizer-runtime/');
        $path = $dir . $rel;
        if (file_exists($path) && !wp_style_is('aieo-push-optin', 'enqueued')) {
            wp_enqueue_style('aieo-push-optin', $uri . $rel, array(), (string) filemtime($path));
        }
    }

    

    public function shortcode() {
        if (!is_user_logged_in()) {
            $login_url = function_exists('wc_get_page_permalink') ? (string) wc_get_page_permalink('myaccount') : wp_login_url();
            return '<p>' . sprintf(
                
                wp_kses(
                    __('<a href="%s">Συνδεθείτε</a> για να δείτε τον επαγγελματικό σας λογαριασμό.', 'ai-eshop-optimizer'),
                    array('a' => array('href' => array()))
                ),
                esc_url($login_url)
            ) . '</p>';
        }

        $user      = wp_get_current_user();
        $pro_slugs = self::pro_role_slugs();
        $active    = !empty($pro_slugs) ? array_values(array_intersect((array) $user->roles, $pro_slugs)) : array();

        return !empty($active) ? $this->render_pro($user, $active) : $this->render_non_pro();
    }

    
    private function render_pro($user, $active) {
        $names = $this->role_display_names($active);

        $out  = '<div class="aieo-pro-account">';

        
        $out .= '<section class="aieo-acct-card" data-aieo-acct-section="pro-status">';
        $out .= '<h2>' . esc_html__('FF Professionals', 'ai-eshop-optimizer') . '</h2>';
        $out .= '<p class="aieo-acct-card__lead">'
              . esc_html__('Είστε εγγεγραμμένος ως:', 'ai-eshop-optimizer') . ' <strong>'
              . esc_html(implode(', ', $names)) . '</strong></p>';
        $out .= '</section>';

        
        $out .= $this->render_savings_card((int) $user->ID);

        
        $out .= '<section class="aieo-acct-card" data-aieo-acct-section="pro-manage">';
        $out .= '<p><a class="button" href="' . esc_url(self::membership_url()) . '">'
              . esc_html__('Διαχείριση / αλλαγή προγράμματος', 'ai-eshop-optimizer') . '</a></p>';
        $out .= '</section>';

        $out .= '</div>';
        return $out;
    }

    
    private function render_non_pro() {
        $out  = '<div class="aieo-pro-account">';

        $out .= '<section class="aieo-acct-card" data-aieo-acct-section="pro-intro">';
        $out .= '<h2>' . esc_html__('FF Professionals', 'ai-eshop-optimizer') . '</h2>';
        $out .= '<p class="aieo-acct-card__lead">'
              . esc_html__('Είστε επαγγελματίας ομορφιάς; Γίνετε μέλος του FF Professionals και αποκτήστε ειδικές τιμές, πρόσβαση σε αποκλειστικά προϊόντα και προσκλήσεις σε events.', 'ai-eshop-optimizer')
              . '</p>';
        $out .= '</section>';

        $out .= '<section class="aieo-acct-card" data-aieo-acct-section="pro-signup">';
        if (shortcode_exists('membership_gf')) {
            $out .= do_shortcode('[membership_gf]');
        } else {
            $out .= '<p><a class="button" href="' . esc_url(self::membership_url()) . '">'
                  . esc_html__('Εγγραφή στο FF Professionals', 'ai-eshop-optimizer') . '</a></p>';
        }
        $out .= '</section>';

        $out .= '</div>';
        return $out;
    }

    
    private function role_display_names($slugs) {
        $names = function_exists('wp_roles') ? wp_roles()->get_names() : array();
        $out = array();
        foreach ($slugs as $slug) {
            if (isset($names[$slug])) {
                $out[] = function_exists('translate_user_role') ? translate_user_role($names[$slug]) : (string) $names[$slug];
            } else {
                $out[] = (string) $slug;
            }
        }
        return $out;
    }

    
    private function render_savings_card($user_id) {
        global $wpdb;
        $table = $wpdb->prefix . 'aieo_order_products_analytics';

        $savings   = null;
        $pro_lines = 0;
        $orders    = 0;

        
        if ($wpdb->get_var($wpdb->prepare('SHOW TABLES LIKE %s', $table))) {
            
            $row = $wpdb->get_row($wpdb->prepare(
                "SELECT ROUND(SUM(CASE WHEN prof_discount = 'NAI' THEN GREATEST(COALESCE(list_price,0)-COALESCE(unit_price,0),0)*COALESCE(quantity,1) ELSE 0 END),2) AS savings,
                        SUM(prof_discount = 'NAI') AS pro_lines,
                        COUNT(DISTINCT order_id) AS orders
                 FROM `{$table}` WHERE customer_id = %d",
                (int) $user_id
            ));
            if ($row) {
                $savings   = ($row->savings === null) ? null : (float) $row->savings;
                $pro_lines = (int) $row->pro_lines;
                $orders    = (int) $row->orders;
            }
        }

        $out  = '<section class="aieo-acct-card" data-aieo-acct-section="pro-savings">';
        $out .= '<h2>' . esc_html__('Οι εξοικονομήσεις σας', 'ai-eshop-optimizer') . '</h2>';

        if ($savings !== null && $savings > 0) {
            $out .= '<p class="aieo-acct-card__lead">'
                  . sprintf(
                      
                      esc_html__('Έχετε εξοικονομήσει %s χάρη στην ιδιότητά σας ως επαγγελματίας.', 'ai-eshop-optimizer'),
                      wp_kses_post(wc_price($savings))
                  )
                  . '</p>';
            $out .= '<p class="aieo-acct-card__note">'
                  . sprintf(
                      
                      esc_html(_n(
                          '%1$s προϊόν σε επαγγελματική τιμή, σε %2$s παραγγελίες.',
                          '%1$s προϊόντα σε επαγγελματική τιμή, σε %2$s παραγγελίες.',
                          $pro_lines,
                          'ai-eshop-optimizer'
                      )),
                      esc_html(number_format_i18n($pro_lines)),
                      esc_html(number_format_i18n($orders))
                  )
                  . '</p>';
        } else {
            $out .= '<p>' . esc_html__('Δεν έχετε εξοικονομήσει κάτι ακόμη — οι αγορές σας σε επαγγελματική τιμή θα εμφανιστούν εδώ.', 'ai-eshop-optimizer') . '</p>';
        }

        $out .= '</section>';
        return $out;
    }
}
}
