<?php
/**
 * کلاس گالری تصاویر محصول
 * نسخه: 1.0.0
 */
if (!defined('ABSPATH')) exit;

class Dima_Gallery {
    
    private static $instance = null;
    
    public static function get_instance() {
        if (null === self::$instance) {
            self::$instance = new self();
        }
        return self::$instance;
    }
    
    private function __construct() {
        // Meta Box گالری
        add_action('add_meta_boxes', array($this, 'add_gallery_meta_box'));
        add_action('save_post_dima_product', array($this, 'save_gallery'), 20, 2);
        
        // AJAX برای مدیریت گالری
        add_action('wp_ajax_dima_gallery_upload', array($this, 'ajax_upload'));
        add_action('wp_ajax_dima_gallery_reorder', array($this, 'ajax_reorder'));
        add_action('wp_ajax_dima_gallery_delete', array($this, 'ajax_delete'));
        
        // ستون گالری در لیست محصولات
        add_filter('manage_dima_product_posts_columns', array($this, 'add_gallery_column'), 20);
        add_action('manage_dima_product_posts_custom_column', array($this, 'gallery_column_content'), 20, 2);
    }
    
    /**
     * اضافه کردن Meta Box گالری
     */
    public function add_gallery_meta_box() {
        add_meta_box(
            'dima_product_gallery',
            '🖼️ گالری تصاویر محصول',
            array($this, 'render_gallery_meta_box'),
            'dima_product',
            'normal',
            'high'
        );
    }
    
    /**
     * رندر Meta Box گالری
     */
    public function render_gallery_meta_box($post) {
        wp_nonce_field('dima_gallery_nonce', 'dima_gallery_nonce');
        
        $gallery_ids = get_post_meta($post->ID, '_dima_gallery', true);
        if (!is_array($gallery_ids)) {
            $gallery_ids = array();
        }
        ?>
        <div class="dima-gallery-box">
            <p class="description" style="margin-bottom:15px;">
                تصاویر اضافی محصول را اضافه کنید. تصویر شاخص به صورت خودکار اولین تصویر گالری است.
                برای تغییر ترتیب، تصاویر را drag & drop کنید.
            </p>
            
            <div id="dima-gallery-container" class="dima-gallery-container">
                <?php if (!empty($gallery_ids)): ?>
                    <?php foreach ($gallery_ids as $image_id): 
                        $url = wp_get_attachment_image_url($image_id, 'thumbnail');
                        if (!$url) continue;
                    ?>
                    <div class="gallery-item" data-id="<?php echo intval($image_id); ?>">
                        <img src="<?php echo esc_url($url); ?>" alt="">
                        <button type="button" class="gallery-remove" title="حذف">×</button>
                        <div class="gallery-handle" title="جابجایی">⋮⋮</div>
                    </div>
                    <?php endforeach; ?>
                <?php endif; ?>
            </div>
            
            <div class="gallery-actions" style="margin-top:15px;">
                <button type="button" id="dima-add-gallery-btn" class="button button-primary">
                    ➕ افزودن تصاویر
                </button>
                <button type="button" id="dima-clear-gallery-btn" class="button">
                    🗑️ پاک کردن همه
                </button>
            </div>
            
            <input type="hidden" id="dima-gallery-ids" name="dima_gallery_ids" 
                   value="<?php echo esc_attr(implode(',', $gallery_ids)); ?>">
        </div>
        
        <style>
        .dima-gallery-box { padding: 10px 0; }
        .dima-gallery-container {
            display: flex;
            flex-wrap: wrap;
            gap: 10px;
            min-height: 120px;
            padding: 15px;
            background: #f9fafb;
            border: 2px dashed #d1d5db;
            border-radius: 10px;
        }
        .dima-gallery-container:empty::before {
            content: 'هنوز تصویری اضافه نشده. روی "افزودن تصاویر" کلیک کنید.';
            color: #9ca3af;
            font-style: italic;
            display: flex;
            align-items: center;
            justify-content: center;
            width: 100%;
        }
        .gallery-item {
            position: relative;
            width: 120px;
            height: 120px;
            background: white;
            border: 2px solid #e5e7eb;
            border-radius: 8px;
            overflow: hidden;
            cursor: move;
            transition: all 0.2s;
        }
        .gallery-item:hover {
            border-color: #6366f1;
            box-shadow: 0 4px 12px rgba(99, 102, 241, 0.2);
        }
        .gallery-item img {
            width: 100%;
            height: 100%;
            object-fit: cover;
        }
        .gallery-remove {
            position: absolute;
            top: 4px;
            left: 4px;
            width: 24px;
            height: 24px;
            background: #ef4444;
            color: white;
            border: none;
            border-radius: 50%;
            cursor: pointer;
            font-size: 16px;
            line-height: 1;
            opacity: 0;
            transition: opacity 0.2s;
        }
        .gallery-item:hover .gallery-remove { opacity: 1; }
        .gallery-remove:hover { background: #dc2626; }
        .gallery-handle {
            position: absolute;
            bottom: 4px;
            right: 4px;
            background: rgba(0,0,0,0.6);
            color: white;
            padding: 2px 6px;
            border-radius: 4px;
            font-size: 12px;
            cursor: move;
        }
        .gallery-item.dragging {
            opacity: 0.5;
            border-color: #6366f1;
        }
        </style>
        
        <script>
        jQuery(document).ready(function($) {
            var galleryFrame;
            
            // افزودن تصویر
            $('#dima-add-gallery-btn').on('click', function(e) {
                e.preventDefault();
                
                if (galleryFrame) {
                    galleryFrame.open();
                    return;
                }
                
                galleryFrame = wp.media({
                    title: 'افزودن به گالری محصول',
                    button: { text: 'افزودن به گالری' },
                    multiple: true,
                    library: { type: 'image' }
                });
                
                galleryFrame.on('select', function() {
                    var attachments = galleryFrame.state().get('selection').toJSON();
                    var currentIds = $('#dima-gallery-ids').val();
                    var ids = currentIds ? currentIds.split(',') : [];
                    
                    attachments.forEach(function(att) {
                        if (!ids.includes(String(att.id))) {
                            ids.push(att.id);
                            var thumb = att.sizes && att.sizes.thumbnail 
                                ? att.sizes.thumbnail.url 
                                : att.url;
                            
                            var html = '<div class="gallery-item" data-id="' + att.id + '">' +
                                '<img src="' + thumb + '" alt="">' +
                                '<button type="button" class="gallery-remove">×</button>' +
                                '<div class="gallery-handle">⋮⋮</div>' +
                                '</div>';
                            $('#dima-gallery-container').append(html);
                        }
                    });
                    
                    $('#dima-gallery-ids').val(ids.join(','));
                });
                
                galleryFrame.open();
            });
            
            // حذف تصویر
            $(document).on('click', '.gallery-remove', function(e) {
                e.preventDefault();
                var $item = $(this).closest('.gallery-item');
                var id = $item.data('id');
                
                $item.fadeOut(200, function() {
                    $(this).remove();
                    updateIds();
                });
            });
            
            // پاک کردن همه
            $('#dima-clear-gallery-btn').on('click', function(e) {
                e.preventDefault();
                if (confirm('آیا از حذف همه تصاویر گالری مطمئن هستید؟')) {
                    $('#dima-gallery-container').empty();
                    $('#dima-gallery-ids').val('');
                }
            });
            
            // Drag & Drop برای تغییر ترتیب
            var container = document.getElementById('dima-gallery-container');
            var draggedItem = null;
            
            $(container).on('dragstart', '.gallery-item', function(e) {
                draggedItem = this;
                $(this).addClass('dragging');
                e.originalEvent.dataTransfer.effectAllowed = 'move';
            });
            
            $(container).on('dragend', '.gallery-item', function() {
                $(this).removeClass('dragging');
                draggedItem = null;
                updateIds();
            });
            
            $(container).on('dragover', '.gallery-item', function(e) {
                e.preventDefault();
                e.originalEvent.dataTransfer.dropEffect = 'move';
            });
            
            $(container).on('drop', '.gallery-item', function(e) {
                e.preventDefault();
                if (draggedItem !== this) {
                    var $dragged = $(draggedItem);
                    var $target = $(this);
                    
                    if ($dragged.index() < $target.index()) {
                        $target.after($dragged);
                    } else {
                        $target.before($dragged);
                    }
                }
            });
            
            // فعال‌سازی draggable
            $('.gallery-item').attr('draggable', true);
            
            function updateIds() {
                var ids = [];
                $('#dima-gallery-container .gallery-item').each(function() {
                    ids.push($(this).data('id'));
                });
                $('#dima-gallery-ids').val(ids.join(','));
            }
        });
        </script>
        <?php
    }
    
    /**
     * ذخیره گالری
     */
    public function save_gallery($post_id, $post) {
        if (!isset($_POST['dima_gallery_nonce']) || 
            !wp_verify_nonce($_POST['dima_gallery_nonce'], 'dima_gallery_nonce')) {
            return;
        }
        
        if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
        if (!current_user_can('edit_post', $post_id)) return;
        
        $gallery_ids = isset($_POST['dima_gallery_ids']) ? sanitize_text_field($_POST['dima_gallery_ids']) : '';
        
        if (!empty($gallery_ids)) {
            $ids = array_map('intval', array_filter(explode(',', $gallery_ids)));
            update_post_meta($post_id, '_dima_gallery', $ids);
        } else {
            delete_post_meta($post_id, '_dima_gallery');
        }
    }
    
    /**
     * دریافت گالری محصول
     */
    public static function get_gallery($product_id) {
        $gallery_ids = get_post_meta($product_id, '_dima_gallery', true);
        if (!is_array($gallery_ids)) return array();
        
        $images = array();
        foreach ($gallery_ids as $id) {
            $url = wp_get_attachment_image_url($id, 'medium');
            $full_url = wp_get_attachment_image_url($id, 'full');
            $thumb_url = wp_get_attachment_image_url($id, 'thumbnail');
            
            if ($url) {
                $images[] = array(
                    'id' => $id,
                    'url' => $url,
                    'full_url' => $full_url,
                    'thumb_url' => $thumb_url,
                    'alt' => get_post_meta($id, '_wp_attachment_image_alt', true)
                );
            }
        }
        
        return $images;
    }
    
    /**
     * ستون گالری در لیست محصولات
     */
    public function add_gallery_column($columns) {
        $new = array();
        foreach ($columns as $key => $value) {
            if ($key === 'title') {
                $new[$key] = $value;
                $new['dima_gallery'] = '🖼️ گالری';
            } else {
                $new[$key] = $value;
            }
        }
        return $new;
    }
    
    public function gallery_column_content($column, $post_id) {
        if ($column === 'dima_gallery') {
            $gallery = self::get_gallery($post_id);
            $count = count($gallery);
            
            if ($count > 0) {
                echo '<div style="display:flex; gap:3px;">';
                foreach (array_slice($gallery, 0, 4) as $img) {
                    echo '<img src="' . esc_url($img['thumb_url']) . '" style="width:30px; height:30px; border-radius:4px; object-fit:cover;">';
                }
                echo '</div>';
                if ($count > 4) {
                    echo '<small style="color:#6b7280;">+' . ($count - 4) . ' تصویر</small>';
                }
            } else {
                echo '<span style="color:#9ca3af;">-</span>';
            }
        }
    }
    
    public function ajax_upload() { check_ajax_referer('dima_shop_nonce', 'nonce'); }
    public function ajax_reorder() { check_ajax_referer('dima_shop_nonce', 'nonce'); }
    public function ajax_delete() { check_ajax_referer('dima_shop_nonce', 'nonce'); }
}