<?php
/**
 * کلاس import داده‌های نمونه
 * نسخه: 1.1.0 - رفع خطای array_combine
 */
if (!defined('ABSPATH')) exit;

class Dima_Import_Demo {
    
    private $errors = array();
    
    public function import($csv_file) {
        if (!file_exists($csv_file)) {
            return array('error' => 'فایل یافت نشد: ' . $csv_file);
        }
        
        $fp = fopen($csv_file, 'r');
        if (!$fp) {
            return array('error' => 'خطا در باز کردن فایل');
        }
        
        // خواندن BOM
        $bom = fread($fp, 3);
        if ($bom !== chr(0xEF).chr(0xBB).chr(0xBF)) {
            rewind($fp);
        }
        
        // خواندن header
        $header = fgetcsv($fp, 0, ',');
        if (!$header || empty($header)) {
            fclose($fp);
            return array('error' => 'فایل CSV خالی یا نامعتبر است');
        }
        
        // پاکسازی header
        $header = array_map(function($h) {
            return trim(sanitize_text_field($h));
        }, $header);
        
        $header_count = count($header);
        
        $result = array(
            'products' => 0,
            'categories' => 0,
            'coupons' => 0,
            'errors' => array(),
            'skipped' => 0
        );
        
        $line_number = 1;
        
        while (($row = fgetcsv($fp, 0, ',')) !== false) {
            $line_number++;
            
            // رد کردن ردیف‌های خالی
            if (empty($row) || (count($row) === 1 && empty($row[0]))) {
                $result['skipped']++;
                continue;
            }
            
            // بررسی تعداد ستون‌ها
            $row_count = count($row);
            
            if ($row_count !== $header_count) {
                // اگر تعداد ستون‌ها کمتر بود، با مقادیر خالی پر کن
                if ($row_count < $header_count) {
                    $row = array_pad($row, $header_count, '');
                } 
                // اگر بیشتر بود، اضافی‌ها را حذف کن
                else {
                    $row = array_slice($row, 0, $header_count);
                }
                
                $result['errors'][] = "خط $line_number: تعداد ستون‌ها اصلاح شد ($row_count → $header_count)";
            }
            
            // پاکسازی مقادیر
            $row = array_map(function($v) {
                return trim($v);
            }, $row);
            
            // ایجاد آرایه associative
            $data = array_combine($header, $row);
            
            if (!$data) {
                $result['errors'][] = "خط $line_number: خطا در ترکیب داده‌ها";
                continue;
            }
            
            $type = isset($data['type']) ? sanitize_text_field($data['type']) : '';
            
            try {
                if ($type === 'category') {
                    $this->import_category($data);
                    $result['categories']++;
                } elseif ($type === 'product') {
                    $this->import_product($data);
                    $result['products']++;
                } elseif ($type === 'coupon') {
                    $this->import_coupon($data);
                    $result['coupons']++;
                } else {
                    $result['skipped']++;
                }
            } catch (Exception $e) {
                $result['errors'][] = "خط $line_number: " . $e->getMessage();
            }
        }
        
        fclose($fp);
        
        if (empty($result['errors'])) {
            update_option('dima_demo_data_imported', true);
        }
        
        return $result;
    }
    
    private function import_category($data) {
        $name = isset($data['name']) ? sanitize_text_field($data['name']) : '';
        $slug = isset($data['slug']) ? sanitize_title($data['slug']) : '';
        $description = isset($data['description']) ? sanitize_textarea_field($data['description']) : '';
        $parent_slug = isset($data['parent']) ? sanitize_text_field($data['parent']) : '';
        
        if (empty($name) || empty($slug)) {
            throw new Exception('نام و slug دسته‌بندی الزامی است');
        }
        
        $parent_id = 0;
        if ($parent_slug) {
            $parent_term = get_term_by('slug', $parent_slug, 'dima_product_cat');
            if ($parent_term) {
                $parent_id = $parent_term->term_id;
            }
        }
        
        // بررسی وجود قبلی
        $existing = get_term_by('slug', $slug, 'dima_product_cat');
        if ($existing) {
            return $existing->term_id;
        }
        
        $result = wp_insert_term($name, 'dima_product_cat', array(
            'slug' => $slug,
            'description' => $description,
            'parent' => $parent_id
        ));
        
        if (is_wp_error($result)) {
            throw new Exception($result->get_error_message());
        }
        
        // رنگ تصادفی برای دسته‌بندی
        $color = '#' . substr(md5($slug), 0, 6);
        update_term_meta($result['term_id'], 'category_color', $color);
        
        return $result['term_id'];
    }
    
    private function import_product($data) {
        $title = isset($data['name']) ? sanitize_text_field($data['name']) : '';
        $slug = isset($data['slug']) ? sanitize_title($data['slug']) : '';
        $content = isset($data['description']) ? sanitize_textarea_field($data['description']) : '';
        $category_slug = isset($data['parent']) ? sanitize_text_field($data['parent']) : '';
        $price = isset($data['price']) ? floatval($data['price']) : 0;
        $stock = isset($data['stock']) ? intval($data['stock']) : 0;
        $sku = isset($data['sku']) ? sanitize_text_field($data['sku']) : '';
        
        if (empty($title)) {
            throw new Exception('نام محصول الزامی است');
        }
        
        // تولید slug خودکار اگر خالی باشد
        if (empty($slug)) {
            $slug = sanitize_title($title);
        }
        
        // بررسی وجود قبلی
        $existing = get_page_by_path($slug, OBJECT, 'dima_product');
        if ($existing) {
            return $existing->ID;
        }
        
        $product_id = wp_insert_post(array(
            'post_title' => $title,
            'post_name' => $slug,
            'post_content' => $content,
            'post_excerpt' => wp_trim_words($content, 30),
            'post_status' => 'publish',
            'post_type' => 'dima_product',
            'post_author' => 1
        ));
        
        if (is_wp_error($product_id)) {
            throw new Exception($product_id->get_error_message());
        }
        
        // متاها
        update_post_meta($product_id, '_dima_price', $price);
        update_post_meta($product_id, '_dima_stock', $stock);
        update_post_meta($product_id, '_dima_sku', $sku);
        update_post_meta($product_id, '_dima_sales_count', rand(10, 100));
        update_post_meta($product_id, '_dima_view_count', rand(100, 1000));
        update_post_meta($product_id, '_dima_avg_rating', rand(35, 50) / 10);
        update_post_meta($product_id, '_dima_review_count', rand(5, 30));
        
        // دسته‌بندی
        if ($category_slug) {
            $term = get_term_by('slug', $category_slug, 'dima_product_cat');
            if ($term) {
                wp_set_object_terms($product_id, $term->term_id, 'dima_product_cat');
            }
        }
        
        return $product_id;
    }
    
    private function import_coupon($data) {
        global $wpdb;
        
        $code = isset($data['name']) ? strtoupper(sanitize_text_field($data['name'])) : '';
        $type = isset($data['slug']) ? sanitize_text_field($data['slug']) : 'percent';
        $value = isset($data['description']) ? floatval($data['description']) : 0;
        $min_amount = isset($data['parent']) ? floatval($data['parent']) : 0;
        $max_uses = isset($data['price']) ? intval($data['price']) : 0;
        $expiry = isset($data['stock']) ? sanitize_text_field($data['stock']) : '';
        
        if (empty($code)) {
            throw new Exception('کد کوپن الزامی است');
        }
        
        // بررسی وجود قبلی
        $existing = $wpdb->get_var($wpdb->prepare(
            "SELECT id FROM {$wpdb->prefix}dima_coupons WHERE code = %s",
            $code
        ));
        
        if ($existing) {
            return $existing;
        }
        
        $wpdb->insert($wpdb->prefix . 'dima_coupons', array(
            'code' => $code,
            'type' => in_array($type, array('percent', 'fixed')) ? $type : 'percent',
            'value' => $value,
            'min_amount' => $min_amount,
            'max_uses' => $max_uses,
            'expiry_date' => $expiry ?: null,
            'status' => 'active',
            'created_at' => current_time('mysql')
        ));
        
        return $wpdb->insert_id;
    }
}