<?php
/**
 * کلاس مدیریت محصولات، دسته‌بندی‌ها و برندها
 */
if (!defined('ABSPATH')) exit;

class Dima_Product {
    
    /**
     * ثبت Custom Post Type محصول
     */
      public static function register_post_type() {
          $labels = array(
              'name' => 'محصولات',
              'singular_name' => 'محصول',
              'add_new' => 'افزودن محصول',
              'add_new_item' => 'افزودن محصول جدید',
              'edit_item' => 'ویرایش محصول',
              'all_items' => 'همه محصولات',
              'menu_name' => 'محصولات',
              'search_items' => 'جستجوی محصولات',
              'not_found' => 'محصولی یافت نشد'
          );
    
          $args = array(
              'labels' => $labels,
              'public' => true,
              'has_archive' => true,
              'menu_icon' => 'dashicons-products',
              'supports' => array('title', 'editor', 'thumbnail', 'excerpt', 'custom-fields'),
              'show_in_rest' => true,
              'rewrite' => array('slug' => 'product', 'with_front' => false),
              'show_in_nav_menus' => true,
              // ═══════════════════════════════════════════════════════════
              // 🔧 رفع باگ منوی تکراری
              // show_in_menu را false می‌کنیم تا WordPress منو نسازد
              // و فقط منوی دستی ما در dima-shop.php نمایش داده شود
              // ═══════════════════════════════════════════════════════════
              'show_in_menu' => false,
          );
    
          register_post_type('dima_product', $args);
    
          add_action('add_meta_boxes', array(__CLASS__, 'add_meta_boxes'));
          add_action('save_post_dima_product', array(__CLASS__, 'save_meta_boxes'), 10, 2);
    
          add_filter('manage_dima_product_posts_columns', array(__CLASS__, 'custom_columns'));
          add_action('manage_dima_product_posts_custom_column', array(__CLASS__, 'custom_column_content'), 10, 2);
      }
    
    /**
     * ثبت Taxonomy دسته‌بندی
     */
    public static function register_taxonomy() {
        $labels = array(
            'name' => 'دسته‌بندی محصولات',
            'singular_name' => 'دسته‌بندی',
            'add_new_item' => 'افزودن دسته‌بندی جدید',
            'edit_item' => 'ویرایش دسته‌بندی',
            'all_items' => 'همه دسته‌بندی‌ها'
        );
        
        $args = array(
            'labels' => $labels,
            'hierarchical' => true,
            'show_in_rest' => true,
            'rewrite' => array('slug' => 'product-category')
        );
        
        register_taxonomy('dima_product_cat', 'dima_product', $args);
        
        add_action('dima_product_cat_add_form_fields', array(__CLASS__, 'add_category_fields'));
        add_action('dima_product_cat_edit_form_fields', array(__CLASS__, 'edit_category_fields'));
        add_action('created_dima_product_cat', array(__CLASS__, 'save_category_fields'));
        add_action('edited_dima_product_cat', array(__CLASS__, 'save_category_fields'));
        
        add_filter('manage_edit-dima_product_cat_columns', array(__CLASS__, 'category_columns'));
        add_filter('manage_dima_product_cat_custom_column', array(__CLASS__, 'category_column_content'), 10, 3);
    }
    
    /**
     * ثبت Taxonomy برندها
     */
    public static function register_brand_taxonomy() {
        $labels = array(
            'name' => 'برندها',
            'singular_name' => 'برند',
            'add_new_item' => 'افزودن برند جدید',
            'edit_item' => 'ویرایش برند',
            'all_items' => 'همه برندها',
            'search_items' => 'جستجوی برندها'
        );
        
        $args = array(
            'labels' => $labels,
            'hierarchical' => false,
            'show_in_rest' => true,
            'rewrite' => array('slug' => 'brand')
        );
        
        register_taxonomy('dima_brand', 'dima_product', $args);
        
        add_action('dima_brand_add_form_fields', array(__CLASS__, 'add_brand_logo_field'));
        add_action('dima_brand_edit_form_fields', array(__CLASS__, 'edit_brand_logo_field'));
        add_action('created_dima_brand', array(__CLASS__, 'save_brand_logo'));
        add_action('edited_dima_brand', array(__CLASS__, 'save_brand_logo'));
    }
    
    /**
     * Meta Box های محصول
     */
    public static function add_meta_boxes() {
        add_meta_box(
            'dima_product_pricing',
            '💰 قیمت و موجودی',
            array(__CLASS__, 'pricing_meta_box'),
            'dima_product',
            'side',
            'high'
        );
        
        add_meta_box(
            'dima_product_seo',
            ' تنظیمات SEO',
            array(__CLASS__, 'seo_meta_box'),
            'dima_product',
            'normal',
            'default'
        );
    }
    
    /**
     * Meta Box قیمت
     */
    public static function pricing_meta_box($post) {
        $price = get_post_meta($post->ID, '_dima_price', true);
        $stock = get_post_meta($post->ID, '_dima_stock', true);
        $sku = get_post_meta($post->ID, '_dima_sku', true);
        $weight = get_post_meta($post->ID, '_dima_weight', true);
        $sales_count = get_post_meta($post->ID, '_dima_sales_count', true);
        $view_count = get_post_meta($post->ID, '_dima_view_count', true);
        $featured = get_post_meta($post->ID, '_dima_featured', true);
        
        wp_nonce_field('dima_product_meta', 'dima_product_meta_nonce');
        ?>
        <div class="dima-meta-box">
            <p>
                <label>SKU (کد محصول):</label>
                <input type="text" name="dima_sku" value="<?php echo esc_attr($sku); ?>" class="widefat" placeholder="DIMA-001">
            </p>
            <p>
                <label>قیمت (تومان): *</label>
                <input type="number" name="dima_price" value="<?php echo esc_attr($price); ?>" class="widefat" step="1" min="0" required>
            </p>
            <p>
                <label>موجودی (خالی = نامحدود):</label>
                <input type="number" name="dima_stock" value="<?php echo esc_attr($stock); ?>" class="widefat" step="1" min="0">
            </p>
            <p>
                <label>وزن (گرم):</label>
                <input type="number" name="dima_weight" value="<?php echo esc_attr($weight); ?>" class="widefat" step="1" min="0">
            </p>
            <p>
                <label>
                    <input type="checkbox" name="dima_featured" value="1" <?php checked($featured, '1'); ?>>
                    محصول ویژه 
                </label>
            </p>
            <hr>
            <p style="color:#6b7280; font-size:12px;">
                📊 فروش: <?php echo intval($sales_count); ?> | 👁️ بازدید: <?php echo intval($view_count); ?>
            </p>
        </div>
        <?php
    }
    
    /**
     * Meta Box SEO
     */
    public static function seo_meta_box($post) {
        $meta_title = get_post_meta($post->ID, '_dima_seo_title', true);
        $meta_description = get_post_meta($post->ID, '_dima_seo_description', true);
        $meta_keywords = get_post_meta($post->ID, '_dima_seo_keywords', true);
        
        wp_nonce_field('dima_product_seo', 'dima_product_seo_nonce');
        ?>
        <div class="dima-meta-box">
            <p>
                <label>عنوان SEO (اختیاری):</label>
                <input type="text" name="dima_seo_title" value="<?php echo esc_attr($meta_title); ?>" class="widefat">
            </p>
            <p>
                <label>توضیحات متا (حداکثر ۱۶۰ کاراکتر):</label>
                <textarea name="dima_seo_description" class="widefat" rows="3" maxlength="160"><?php echo esc_textarea($meta_description); ?></textarea>
                <span class="description">تعداد: <span id="seo-desc-count"><?php echo strlen($meta_description); ?></span>/160</span>
            </p>
            <p>
                <label>کلمات کلیدی (با کاما جدا کنید):</label>
                <input type="text" name="dima_seo_keywords" value="<?php echo esc_attr($meta_keywords); ?>" class="widefat">
            </p>
        </div>
        <script>
        jQuery(document).ready(function($) {
            $('textarea[name="dima_seo_description"]').on('input', function() {
                $('#seo-desc-count').text($(this).val().length);
            });
        });
        </script>
        <?php
    }
    
    /**
     * ذخیره Meta Box ها
     */
    public static function save_meta_boxes($post_id, $post) {
        if (!isset($_POST['dima_product_meta_nonce']) && !isset($_POST['dima_product_seo_nonce'])) {
            return;
        }
        
        if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
        if ($post->post_type !== 'dima_product') return;
        if (!current_user_can('edit_post', $post_id)) return;
        
        if (isset($_POST['dima_product_meta_nonce']) && wp_verify_nonce($_POST['dima_product_meta_nonce'], 'dima_product_meta')) {
            update_post_meta($post_id, '_dima_price', isset($_POST['dima_price']) ? floatval($_POST['dima_price']) : 0);
            update_post_meta($post_id, '_dima_stock', isset($_POST['dima_stock']) ? absint($_POST['dima_stock']) : '');
            update_post_meta($post_id, '_dima_sku', isset($_POST['dima_sku']) ? sanitize_text_field($_POST['dima_sku']) : '');
            update_post_meta($post_id, '_dima_weight', isset($_POST['dima_weight']) ? absint($_POST['dima_weight']) : 0);
            update_post_meta($post_id, '_dima_featured', isset($_POST['dima_featured']) ? '1' : '0');
        }
        
        if (isset($_POST['dima_product_seo_nonce']) && wp_verify_nonce($_POST['dima_product_seo_nonce'], 'dima_product_seo')) {
            update_post_meta($post_id, '_dima_seo_title', isset($_POST['dima_seo_title']) ? sanitize_text_field($_POST['dima_seo_title']) : '');
            update_post_meta($post_id, '_dima_seo_description', isset($_POST['dima_seo_description']) ? sanitize_textarea_field($_POST['dima_seo_description']) : '');
            update_post_meta($post_id, '_dima_seo_keywords', isset($_POST['dima_seo_keywords']) ? sanitize_text_field($_POST['dima_seo_keywords']) : '');
        }
    }
    
    /**
     * فیلدهای دسته‌بندی
     */
    public static function add_category_fields() {
        ?>
        <div class="form-field">
            <label>تصویر دسته‌بندی</label>
            <input type="hidden" id="category_image_id" name="category_image_id" value="">
            <div id="category-image-preview"></div>
            <button type="button" class="button" id="upload-category-image-btn">انتخاب تصویر</button>
            <button type="button" class="button" id="remove-category-image-btn" style="display:none;">حذف</button>
        </div>
        <div class="form-field">
            <label>آیکون دسته‌بندی</label>
            <select name="category_icon" id="category_icon">
                <option value="">بدون آیکون</option>
                <option value="dashicons-cart">🛒 سبد خرید</option>
                <option value="dashicons-products">📦 محصولات</option>
                <option value="dashicons-star-filled">⭐ ستاره</option>
                <option value="dashicons-heart">❤️ قلب</option>
                <option value="dashicons-money">💰 پول</option>
                <option value="dashicons-shopping-bag">🛍️ کیف خرید</option>
                <option value="dashicons-smiley">😊 خندان</option>
                <option value="dashicons-lightbulb">💡 لامپ</option>
                <option value="dashicons-clock"> ساعت</option>
            </select>
        </div>
        <div class="form-field">
            <label>رنگ دسته‌بندی</label>
            <input type="color" name="category_color" id="category_color" value="#3498db">
        </div>
        <div class="form-field">
            <label>توضیحات SEO</label>
            <textarea name="category_seo_description" rows="3" maxlength="160"></textarea>
        </div>
        <?php
    }
    
    /**
     * فیلدهای ویرایش دسته‌بندی
     */
    public static function edit_category_fields($term) {
        $image_id = get_term_meta($term->term_id, 'category_image_id', true);
        $icon = get_term_meta($term->term_id, 'category_icon', true);
        $color = get_term_meta($term->term_id, 'category_color', true);
        $seo_desc = get_term_meta($term->term_id, 'category_seo_description', true);
        $image_url = $image_id ? wp_get_attachment_image_url($image_id, 'thumbnail') : '';
        ?>
        <tr class="form-field">
            <th scope="row"><label>تصویر دسته‌بندی</label></th>
            <td>
                <input type="hidden" id="category_image_id" name="category_image_id" value="<?php echo esc_attr($image_id); ?>">
                <div id="category-image-preview">
                    <?php if ($image_url): ?>
                        <img src="<?php echo esc_url($image_url); ?>" style="max-width: 200px;">
                    <?php endif; ?>
                </div>
                <button type="button" class="button" id="upload-category-image-btn">انتخاب تصویر</button>
                <button type="button" class="button" id="remove-category-image-btn" <?php echo !$image_url ? 'style="display:none;"' : ''; ?>>حذف</button>
            </td>
        </tr>
        <tr class="form-field">
            <th scope="row"><label>آیکون</label></th>
            <td>
                <select name="category_icon" id="category_icon">
                    <option value="">بدون آیکون</option>
                    <option value="dashicons-cart" <?php selected($icon, 'dashicons-cart'); ?>>🛒 سبد خرید</option>
                    <option value="dashicons-products" <?php selected($icon, 'dashicons-products'); ?>>📦 محصولات</option>
                    <option value="dashicons-star-filled" <?php selected($icon, 'dashicons-star-filled'); ?>>⭐ ستاره</option>
                    <option value="dashicons-heart" <?php selected($icon, 'dashicons-heart'); ?>>❤️ قلب</option>
                    <option value="dashicons-money" <?php selected($icon, 'dashicons-money'); ?>>💰 پول</option>
                    <option value="dashicons-shopping-bag" <?php selected($icon, 'dashicons-shopping-bag'); ?>>🛍️ کیف خرید</option>
                </select>
            </td>
        </tr>
        <tr class="form-field">
            <th scope="row"><label>رنگ</label></th>
            <td><input type="color" name="category_color" value="<?php echo esc_attr($color ?: '#3498db'); ?>"></td>
        </tr>
        <tr class="form-field">
            <th scope="row"><label>توضیحات SEO</label></th>
            <td><textarea name="category_seo_description" rows="3" maxlength="160"><?php echo esc_textarea($seo_desc); ?></textarea></td>
        </tr>
        <?php
    }
    
    /**
     * ذخیره فیلدهای دسته‌بندی
     */
    public static function save_category_fields($term_id) {
        if (!current_user_can('manage_categories')) return;
        
        if (isset($_POST['category_image_id'])) {
            update_term_meta($term_id, 'category_image_id', absint($_POST['category_image_id']));
        }
        if (isset($_POST['category_icon'])) {
            update_term_meta($term_id, 'category_icon', sanitize_text_field($_POST['category_icon']));
        }
        if (isset($_POST['category_color'])) {
            update_term_meta($term_id, 'category_color', sanitize_hex_color($_POST['category_color']));
        }
        if (isset($_POST['category_seo_description'])) {
            update_term_meta($term_id, 'category_seo_description', sanitize_textarea_field($_POST['category_seo_description']));
        }
    }
    
    /**
     * فیلد لوگوی برند
     */
    public static function add_brand_logo_field() {
        ?>
        <div class="form-field">
            <label>لوگوی برند</label>
            <input type="hidden" id="brand_logo" name="brand_logo" value="">
            <div id="brand_logo_preview"></div>
            <button type="button" class="button" id="upload_brand_logo">انتخاب لوگو</button>
            <button type="button" class="button" id="remove_brand_logo" style="display:none;">حذف</button>
        </div>
        <?php
    }
    
    public static function edit_brand_logo_field($term) {
        $logo_id = get_term_meta($term->term_id, 'brand_logo', true);
        $logo_url = $logo_id ? wp_get_attachment_image_url($logo_id, 'medium') : '';
        ?>
        <tr class="form-field">
            <th scope="row"><label>لوگوی برند</label></th>
            <td>
                <input type="hidden" id="brand_logo" name="brand_logo" value="<?php echo esc_attr($logo_id); ?>">
                <div id="brand_logo_preview">
                    <?php if ($logo_url): ?>
                        <img src="<?php echo esc_url($logo_url); ?>" style="max-height: 100px;">
                    <?php endif; ?>
                </div>
                <button type="button" class="button" id="upload_brand_logo">انتخاب لوگو</button>
                <button type="button" class="button" id="remove_brand_logo" <?php echo !$logo_url ? 'style="display:none;"' : ''; ?>>حذف</button>
            </td>
        </tr>
        <?php
    }
    
    public static function save_brand_logo($term_id) {
        if (isset($_POST['brand_logo'])) {
            update_term_meta($term_id, 'brand_logo', absint($_POST['brand_logo']));
        }
    }
    
    /**
     * ستون‌های سفارشی لیست محصولات
     */
    public static function custom_columns($columns) {
        $new = array();
        foreach ($columns as $key => $value) {
            if ($key === 'title') {
                $new[$key] = $value;
                $new['dima_price'] = '💰 قیمت';
                $new['dima_stock'] = '📦 موجودی';
                $new['dima_sku'] = '🔖 SKU';
            } else {
                $new[$key] = $value;
            }
        }
        return $new;
    }
    
    public static function custom_column_content($column, $post_id) {
        switch ($column) {
            case 'dima_price':
                $price = self::get_price($post_id);
                echo $price ? number_format($price) . ' تومان' : '-';
                break;
            case 'dima_stock':
                $stock = self::get_stock($post_id);
                if ($stock === '' || $stock === null) {
                    echo '<span style="color:green;">✓ نامحدود</span>';
                } elseif (intval($stock) > 0) {
                    echo '<span style="color:green;">' . intval($stock) . ' عدد</span>';
                } else {
                    echo '<span style="color:red;">ناموجود</span>';
                }
                break;
            case 'dima_sku':
                $sku = get_post_meta($post_id, '_dima_sku', true);
                echo $sku ? esc_html($sku) : '-';
                break;
        }
    }
    
    /**
     * ستون‌های دسته‌بندی
     */
    public static function category_columns($columns) {
        $new = array('cb' => $columns['cb']);
        $new['dima_cat_image'] = 'تصویر';
        $new['dima_cat_icon'] = 'آیکون';
        foreach ($columns as $key => $value) {
            if ($key !== 'cb') $new[$key] = $value;
        }
        return $new;
    }
    
    public static function category_column_content($content, $column_name, $term_id) {
        if ($column_name === 'dima_cat_image') {
            $image_id = get_term_meta($term_id, 'category_image_id', true);
            echo $image_id ? wp_get_attachment_image($image_id, array(50, 50)) : '-';
        } elseif ($column_name === 'dima_cat_icon') {
            $icon = get_term_meta($term_id, 'category_icon', true);
            echo $icon ? '<span class="dashicons ' . esc_attr($icon) . '"></span>' : '-';
        }
        return $content;
    }
    
    /**
     * متدهای کمکی
     */
    public static function get_price($product_id) {
        return get_post_meta($product_id, '_dima_price', true);
    }
    
    public static function get_stock($product_id) {
        return get_post_meta($product_id, '_dima_stock', true);
    }
    
    public static function get_sku($product_id) {
        return get_post_meta($product_id, '_dima_sku', true);
    }
    
    public static function get_category_data($term_id) {
        $image_id = get_term_meta($term_id, 'category_image_id', true);
        return array(
            'image_id' => $image_id,
            'image_url' => $image_id ? wp_get_attachment_image_url($image_id, 'medium') : '',
            'icon' => get_term_meta($term_id, 'category_icon', true),
            'color' => get_term_meta($term_id, 'category_color', true) ?: '#3498db',
            'seo_description' => get_term_meta($term_id, 'category_seo_description', true)
        );
    }
    
    /**
     * افزایش شمارنده فروش
     */
    public static function increment_sales($product_id, $quantity = 1) {
        $current = intval(get_post_meta($product_id, '_dima_sales_count', true));
        update_post_meta($product_id, '_dima_sales_count', $current + $quantity);
    }
    
    /**
     * افزایش شمارنده بازدید
     */
    public static function increment_views($product_id) {
        $current = intval(get_post_meta($product_id, '_dima_view_count', true));
        update_post_meta($product_id, '_dima_view_count', $current + 1);
    }
}