<?php
/**
 * کلاس هوش مصنوعی GapGPT برای Dima Shop
 * نسخه: 1.1.0 - اصلاح نام به GapGPT
 * 
 * ویژگی‌ها:
 * - تولید توضیحات محصول
 * - تولید تصاویر محصول
 * - پیشنهاد عنوان SEO
 * - تولید کلمات کلیدی
 * - ترجمه خودکار
 * - تولید محتوای بلاگ
 * - پیشنهاد دسته‌بندی
 */
if (!defined('ABSPATH')) exit;

class Dima_AI {
    
    private static $instance = null;
    private $api_url = 'https://api.gapgpt.app/v1';
    private $api_key;
    
    // مدل‌های موجود GapGPT
    const MODEL_TEXT = 'gapgpt-pro';
    const MODEL_IMAGE = 'gapgpt-image-xl';
    const MODEL_FAST = 'gapgpt-fast';
    
    public static function get_instance() {
        if (null === self::$instance) {
            self::$instance = new self();
        }
        return self::$instance;
    }
    
    private function __construct() {
        $this->api_key = get_option('dima_ai_api_key', '');
        
        // AJAX Handlers
        add_action('wp_ajax_dima_ai_generate_description', array($this, 'ajax_generate_description'));
        add_action('wp_ajax_dima_ai_generate_title', array($this, 'ajax_generate_title'));
        add_action('wp_ajax_dima_ai_generate_keywords', array($this, 'ajax_generate_keywords'));
        add_action('wp_ajax_dima_ai_generate_image', array($this, 'ajax_generate_image'));
        add_action('wp_ajax_dima_ai_translate', array($this, 'ajax_translate'));
        add_action('wp_ajax_dima_ai_improve_text', array($this, 'ajax_improve_text'));
        add_action('wp_ajax_dima_ai_generate_blog', array($this, 'ajax_generate_blog'));
        add_action('wp_ajax_dima_ai_suggest_category', array($this, 'ajax_suggest_category'));
        add_action('wp_ajax_dima_ai_check_usage', array($this, 'ajax_check_usage'));
        
        // Meta Boxes برای محصولات
        add_action('add_meta_boxes', array($this, 'add_ai_meta_boxes'));
        
        // منوی ادمین
        add_action('admin_menu', array($this, 'add_ai_menu'));
        
        // دکمه‌های AI در ویرایشگر
        add_action('media_buttons', array($this, 'add_ai_media_button'), 20);
    }
    
    /**
     * درخواست به API GapGPT
     */
    private function api_request($endpoint, $data, $model = self::MODEL_TEXT) {
        if (empty($this->api_key)) {
            return new WP_Error('no_api_key', 'کلید API GapGPT تنظیم نشده است. از تنظیمات > تب هوش مصنوعی اقدام کنید.');
        }
        
        $data['model'] = $model;
        $data['api_key'] = $this->api_key;
        
        $response = wp_remote_post($this->api_url . '/' . $endpoint, array(
            'body' => wp_json_encode($data),
            'headers' => array(
                'Content-Type' => 'application/json',
                'Accept' => 'application/json'
            ),
            'timeout' => 60,
            'sslverify' => true
        ));
        
        if (is_wp_error($response)) {
            return $response;
        }
        
        $body = json_decode(wp_remote_retrieve_body($response), true);
        
        if (!isset($body['success']) || !$body['success']) {
            $message = isset($body['message']) ? $body['message'] : 'خطای ناشناخته از GapGPT';
            return new WP_Error('api_error', $message);
        }
        
        // ذخیره استفاده
        $this->log_usage($endpoint, $model);
        
        return $body['data'];
    }
    
    /**
     * ثبت استفاده از API
     */
    private function log_usage($endpoint, $model) {
        $usage = get_option('dima_ai_usage', array(
            'total_requests' => 0,
            'today_requests' => 0,
            'last_request_date' => date('Y-m-d'),
            'endpoints' => array()
        ));
        
        // ریست شمارنده روزانه
        if ($usage['last_request_date'] !== date('Y-m-d')) {
            $usage['today_requests'] = 0;
            $usage['last_request_date'] = date('Y-m-d');
        }
        
        $usage['total_requests']++;
        $usage['today_requests']++;
        
        if (!isset($usage['endpoints'][$endpoint])) {
            $usage['endpoints'][$endpoint] = 0;
        }
        $usage['endpoints'][$endpoint]++;
        
        update_option('dima_ai_usage', $usage);
    }
    
    /**
     * بررسی محدودیت استفاده
     */
    public function check_usage_limit() {
        $usage = get_option('dima_ai_usage', array('today_requests' => 0));
        $limit = intval(get_option('dima_ai_daily_limit', 100));
        
        // ریست روزانه
        $last_date = get_option('dima_ai_last_reset_date', date('Y-m-d'));
        if ($last_date !== date('Y-m-d')) {
            update_option('dima_ai_last_reset_date', date('Y-m-d'));
            $usage['today_requests'] = 0;
            update_option('dima_ai_usage', $usage);
        }
        
        return array(
            'allowed' => $usage['today_requests'] < $limit,
            'used' => $usage['today_requests'],
            'limit' => $limit,
            'remaining' => max(0, $limit - $usage['today_requests'])
        );
    }
    
    /**
     * تولید توضیحات محصول
     */
    public function generate_product_description($product_name, $category = '', $keywords = '', $tone = 'professional') {
        $prompt = "تو یک نویسنده حرفه‌ای محتوا برای فروشگاه آنلاین هستی. 
        یک توضیحات جذاب و حرفه‌ای برای محصول زیر بنویس:
        
        نام محصول: {$product_name}
        دسته‌بندی: {$category}
        کلمات کلیدی: {$keywords}
        لحن: {$tone}
        
        الزامات:
        - حداقل ۲۰۰ کلمه
        - استفاده از کلمات کلیدی به صورت طبیعی
        - جذاب و متقاعدکننده
        - مناسب برای SEO
        - شامل مزایا و ویژگی‌ها
        - بدون استفاده از ایموجی
        - فارسی روان و حرفه‌ای";
        
        return $this->api_request('chat/completions', array(
            'messages' => array(
                array('role' => 'system', 'content' => 'تو یک نویسنده حرفه‌ای محتوای فروشگاهی هستی.'),
                array('role' => 'user', 'content' => $prompt)
            ),
            'temperature' => 0.7,
            'max_tokens' => 1000
        ));
    }
    
    /**
     * تولید عنوان SEO
     */
    public function generate_seo_title($product_name, $category = '') {
        $prompt = "۵ عنوان SEO جذاب و بهینه برای محصول زیر پیشنهاد بده:
        
        نام محصول: {$product_name}
        دسته‌بندی: {$category}
        
        الزامات:
        - هر عنوان حداکثر ۶۰ کاراکتر
        - شامل کلمات کلیدی
        - جذاب برای کلیک
        - مناسب گوگل
        - فقط عناوین را برگردان، هر کدام در یک خط";
        
        return $this->api_request('chat/completions', array(
            'messages' => array(
                array('role' => 'user', 'content' => $prompt)
            ),
            'temperature' => 0.8
        ));
    }
    
    /**
     * تولید کلمات کلیدی
     */
    public function generate_keywords($product_name, $description = '', $count = 10) {
        $prompt = "{$count} کلمه کلیدی مرتبط و پرجستجو برای محصول زیر پیشنهاد بده:
        
        نام محصول: {$product_name}
        توضیحات: {$description}
        
        فقط کلمات کلیدی را با کاما جدا کن، بدون شماره یا توضیح اضافی.";
        
        return $this->api_request('chat/completions', array(
            'messages' => array(
                array('role' => 'user', 'content' => $prompt)
            ),
            'temperature' => 0.7
        ));
    }
    
    /**
     * تولید تصویر محصول
     */
    public function generate_product_image($prompt, $style = 'professional', $size = '1024x1024') {
        $full_prompt = "تصویر محصول حرفه‌ای با مشخصات زیر:
        {$prompt}
        
        سبک: {$style}
        - پس‌زمینه سفید یا ساده
        - نورپردازی استودیویی
        - کیفیت بالا
        - مناسب برای فروشگاه آنلاین";
        
        return $this->api_request('images/generations', array(
            'prompt' => $full_prompt,
            'size' => $size,
            'n' => 1
        ), self::MODEL_IMAGE);
    }
    
    /**
     * ترجمه متن
     */
    public function translate_text($text, $target_lang = 'en', $source_lang = 'fa') {
        $lang_names = array(
            'fa' => 'فارسی',
            'en' => 'انگلیسی',
            'ar' => 'عربی',
            'fr' => 'فرانسوی',
            'de' => 'آلمانی',
            'tr' => 'ترکی'
        );
        
        $target = isset($lang_names[$target_lang]) ? $lang_names[$target_lang] : $target_lang;
        $source = isset($lang_names[$source_lang]) ? $lang_names[$source_lang] : $source_lang;
        
        $prompt = "متن زیر را از {$source} به {$target} ترجمه کن. فقط ترجمه را برگردان:
        
        {$text}";
        
        return $this->api_request('chat/completions', array(
            'messages' => array(
                array('role' => 'user', 'content' => $prompt)
            ),
            'temperature' => 0.3
        ), self::MODEL_FAST);
    }
    
    /**
     * بهبود متن
     */
    public function improve_text($text, $improvement_type = 'grammar') {
        $types = array(
            'grammar' => 'اصلاح گرامری و نگارشی',
            'seo' => 'بهینه‌سازی برای SEO',
            'shorter' => 'کوتاه‌تر کردن متن',
            'longer' => 'گسترش و افزودن جزئیات',
            'professional' => 'رسمی‌تر کردن لحن',
            'friendly' => 'دوستانه‌تر کردن لحن'
        );
        
        $type_desc = isset($types[$improvement_type]) ? $types[$improvement_type] : $improvement_type;
        
        $prompt = "متن زیر را {$type_desc} کن:
        
        {$text}
        
        فقط متن بهبود یافته را برگردان.";
        
        return $this->api_request('chat/completions', array(
            'messages' => array(
                array('role' => 'user', 'content' => $prompt)
            ),
            'temperature' => 0.5
        ));
    }
    
    /**
     * تولید مقاله بلاگ
     */
    public function generate_blog_post($topic, $keywords = '', $length = 'medium') {
        $lengths = array(
            'short' => '۵۰۰ کلمه',
            'medium' => '۱۰۰۰ کلمه',
            'long' => '۲۰۰۰ کلمه'
        );
        
        $target_length = isset($lengths[$length]) ? $lengths[$length] : '۱۰۰۰ کلمه';
        
        $prompt = "یک مقاله بلاگ کامل و حرفه‌ای درباره موضوع زیر بنویس:
        
        موضوع: {$topic}
        کلمات کلیدی: {$keywords}
        طول مقاله: {$target_length}
        
        الزامات:
        - عنوان جذاب
        - مقدمه گیرا
        - ساختار با زیرعنوان‌ها (H2, H3)
        - استفاده از کلمات کلیدی
        - نتیجه‌گیری
        - مناسب برای SEO
        - فارسی روان";
        
        return $this->api_request('chat/completions', array(
            'messages' => array(
                array('role' => 'user', 'content' => $prompt)
            ),
            'temperature' => 0.7,
            'max_tokens' => 3000
        ));
    }
    
    /**
     * پیشنهاد دسته‌بندی
     */
    public function suggest_category($product_name, $description = '') {
        $categories = get_terms(array(
            'taxonomy' => 'dima_product_cat',
            'hide_empty' => false,
            'fields' => 'names'
        ));
        
        $cat_list = is_array($categories) ? implode(', ', $categories) : '';
        
        $prompt = "با توجه به دسته‌بندی‌های موجود، بهترین دسته‌بندی برای محصول زیر را پیشنهاد بده:
        
        نام محصول: {$product_name}
        توضیحات: {$description}
        
        دسته‌بندی‌های موجود: {$cat_list}
        
        فقط نام دسته‌بندی را برگردان.";
        
        return $this->api_request('chat/completions', array(
            'messages' => array(
                array('role' => 'user', 'content' => $prompt)
            ),
            'temperature' => 0.3
        ), self::MODEL_FAST);
    }
    
    // ═══════════════════════════════════════════════════════════
    // AJAX Handlers
    // ═══════════════════════════════════════════════════════════
    
    public function ajax_generate_description() {
        check_ajax_referer('dima_shop_nonce', 'nonce');
        
        if (!current_user_can('edit_posts')) {
            wp_send_json_error(array('message' => 'دسترسی غیرمجاز'));
            return;
        }
        
        $limit_check = $this->check_usage_limit();
        if (!$limit_check['allowed']) {
            wp_send_json_error(array(
                'message' => 'محدودیت روزانه استفاده از GapGPT به پایان رسیده است. فردا دوباره تلاش کنید.',
                'usage' => $limit_check
            ));
            return;
        }
        
        $product_name = sanitize_text_field($_POST['product_name'] ?? '');
        $category = sanitize_text_field($_POST['category'] ?? '');
        $keywords = sanitize_text_field($_POST['keywords'] ?? '');
        $tone = sanitize_text_field($_POST['tone'] ?? 'professional');
        
        if (empty($product_name)) {
            wp_send_json_error(array('message' => 'نام محصول الزامی است'));
            return;
        }
        
        $result = $this->generate_product_description($product_name, $category, $keywords, $tone);
        
        if (is_wp_error($result)) {
            wp_send_json_error(array('message' => $result->get_error_message()));
            return;
        }
        
        wp_send_json_success(array(
            'content' => isset($result['content']) ? $result['content'] : '',
            'usage' => $this->check_usage_limit()
        ));
    }
    
    public function ajax_generate_title() {
        check_ajax_referer('dima_shop_nonce', 'nonce');
        
        if (!current_user_can('edit_posts')) {
            wp_send_json_error(array('message' => 'دسترسی غیرمجاز'));
            return;
        }
        
        $limit_check = $this->check_usage_limit();
        if (!$limit_check['allowed']) {
            wp_send_json_error(array('message' => 'محدودیت روزانه'));
            return;
        }
        
        $product_name = sanitize_text_field($_POST['product_name'] ?? '');
        $category = sanitize_text_field($_POST['category'] ?? '');
        
        $result = $this->generate_seo_title($product_name, $category);
        
        if (is_wp_error($result)) {
            wp_send_json_error(array('message' => $result->get_error_message()));
            return;
        }
        
        wp_send_json_success(array(
            'titles' => isset($result['content']) ? explode("\n", trim($result['content'])) : array(),
            'usage' => $this->check_usage_limit()
        ));
    }
    
    public function ajax_generate_keywords() {
        check_ajax_referer('dima_shop_nonce', 'nonce');
        
        if (!current_user_can('edit_posts')) {
            wp_send_json_error(array('message' => 'دسترسی غیرمجاز'));
            return;
        }
        
        $product_name = sanitize_text_field($_POST['product_name'] ?? '');
        $description = sanitize_textarea_field($_POST['description'] ?? '');
        
        $result = $this->generate_keywords($product_name, $description);
        
        if (is_wp_error($result)) {
            wp_send_json_error(array('message' => $result->get_error_message()));
            return;
        }
        
        wp_send_json_success(array(
            'keywords' => isset($result['content']) ? $result['content'] : '',
            'usage' => $this->check_usage_limit()
        ));
    }
    
    public function ajax_generate_image() {
        check_ajax_referer('dima_shop_nonce', 'nonce');
        
        if (!current_user_can('edit_posts')) {
            wp_send_json_error(array('message' => 'دسترسی غیرمجاز'));
            return;
        }
        
        $prompt = sanitize_textarea_field($_POST['prompt'] ?? '');
        $style = sanitize_text_field($_POST['style'] ?? 'professional');
        $size = sanitize_text_field($_POST['size'] ?? '1024x1024');
        
        if (empty($prompt)) {
            wp_send_json_error(array('message' => 'توضیح تصویر الزامی است'));
            return;
        }
        
        $result = $this->generate_product_image($prompt, $style, $size);
        
        if (is_wp_error($result)) {
            wp_send_json_error(array('message' => $result->get_error_message()));
            return;
        }
        
        // ذخیره تصویر در Media Library
        $image_url = isset($result['url']) ? $result['url'] : '';
        $attachment_id = 0;
        
        if ($image_url) {
            $attachment_id = $this->save_image_to_media($image_url, sanitize_text_field($_POST['filename'] ?? 'gapgpt-generated'));
        }
        
        wp_send_json_success(array(
            'image_url' => $image_url,
            'attachment_id' => $attachment_id,
            'usage' => $this->check_usage_limit()
        ));
    }
    
    public function ajax_translate() {
        check_ajax_referer('dima_shop_nonce', 'nonce');
        
        $text = sanitize_textarea_field($_POST['text'] ?? '');
        $target_lang = sanitize_text_field($_POST['target_lang'] ?? 'en');
        $source_lang = sanitize_text_field($_POST['source_lang'] ?? 'fa');
        
        if (empty($text)) {
            wp_send_json_error(array('message' => 'متن الزامی است'));
            return;
        }
        
        $result = $this->translate_text($text, $target_lang, $source_lang);
        
        if (is_wp_error($result)) {
            wp_send_json_error(array('message' => $result->get_error_message()));
            return;
        }
        
        wp_send_json_success(array(
            'translated' => isset($result['content']) ? $result['content'] : ''
        ));
    }
    
    public function ajax_improve_text() {
        check_ajax_referer('dima_shop_nonce', 'nonce');
        
        $text = sanitize_textarea_field($_POST['text'] ?? '');
        $type = sanitize_text_field($_POST['improvement_type'] ?? 'grammar');
        
        $result = $this->improve_text($text, $type);
        
        if (is_wp_error($result)) {
            wp_send_json_error(array('message' => $result->get_error_message()));
            return;
        }
        
        wp_send_json_success(array(
            'improved' => isset($result['content']) ? $result['content'] : ''
        ));
    }
    
    public function ajax_generate_blog() {
        check_ajax_referer('dima_shop_nonce', 'nonce');
        
        if (!current_user_can('edit_posts')) {
            wp_send_json_error(array('message' => 'دسترسی غیرمجاز'));
            return;
        }
        
        $topic = sanitize_text_field($_POST['topic'] ?? '');
        $keywords = sanitize_text_field($_POST['keywords'] ?? '');
        $length = sanitize_text_field($_POST['length'] ?? 'medium');
        
        $result = $this->generate_blog_post($topic, $keywords, $length);
        
        if (is_wp_error($result)) {
            wp_send_json_error(array('message' => $result->get_error_message()));
            return;
        }
        
        wp_send_json_success(array(
            'content' => isset($result['content']) ? $result['content'] : ''
        ));
    }
    
    public function ajax_suggest_category() {
        check_ajax_referer('dima_shop_nonce', 'nonce');
        
        $product_name = sanitize_text_field($_POST['product_name'] ?? '');
        $description = sanitize_textarea_field($_POST['description'] ?? '');
        
        $result = $this->suggest_category($product_name, $description);
        
        if (is_wp_error($result)) {
            wp_send_json_error(array('message' => $result->get_error_message()));
            return;
        }
        
        // پیدا کردن ID دسته‌بندی
        $cat_name = isset($result['content']) ? trim($result['content']) : '';
        $term = get_term_by('name', $cat_name, 'dima_product_cat');
        
        wp_send_json_success(array(
            'category_name' => $cat_name,
            'category_id' => $term ? $term->term_id : 0
        ));
    }
    
    public function ajax_check_usage() {
        check_ajax_referer('dima_shop_nonce', 'nonce');
        wp_send_json_success($this->check_usage_limit());
    }
    
    /**
     * ذخیره تصویر در Media Library
     */
    private function save_image_to_media($image_url, $filename) {
        require_once ABSPATH . 'wp-admin/includes/file.php';
        require_once ABSPATH . 'wp-admin/includes/media.php';
        require_once ABSPATH . 'wp-admin/includes/image.php';
        
        $temp_file = download_url($image_url, 60);
        
        if (is_wp_error($temp_file)) {
            return 0;
        }
        
        $file_array = array(
            'name' => $filename . '-' . time() . '.jpg',
            'tmp_name' => $temp_file
        );
        
        $attachment_id = media_handle_sideload($file_array, 0);
        
        if (is_wp_error($attachment_id)) {
            @unlink($temp_file);
            return 0;
        }
        
        return $attachment_id;
    }
    
    /**
     * Meta Box برای محصولات
     */
    public function add_ai_meta_boxes() {
        add_meta_box(
            'dima_ai_assistant',
            '🤖 دستیار هوش مصنوعی GapGPT',
            array($this, 'render_ai_meta_box'),
            'dima_product',
            'side',
            'high'
        );
    }
    
    public function render_ai_meta_box($post) {
        wp_nonce_field('dima_ai_meta', 'dima_ai_meta_nonce');
        
        $usage = $this->check_usage_limit();
        ?>
        <div class="dima-ai-meta-box">
            <div class="ai-usage-info">
                <div class="usage-bar">
                    <div class="usage-fill" style="width: <?php echo ($usage['used'] / max(1, $usage['limit'])) * 100; ?>%"></div>
                </div>
                <small>استفاده امروز: <?php echo $usage['used']; ?>/<?php echo $usage['limit']; ?> (GapGPT)</small>
            </div>
            
            <div class="ai-actions">
                <button type="button" class="button ai-btn" data-action="description">
                    ✍️ تولید توضیحات
                </button>
                <button type="button" class="button ai-btn" data-action="title">
                    💡 پیشنهاد عنوان
                </button>
                <button type="button" class="button ai-btn" data-action="keywords">
                    🔑 کلمات کلیدی
                </button>
                <button type="button" class="button ai-btn" data-action="image">
                    🎨 تولید تصویر
                </button>
                <button type="button" class="button ai-btn" data-action="category">
                    📂 پیشنهاد دسته
                </button>
                <button type="button" class="button ai-btn" data-action="improve">
                    ✨ بهبود متن
                </button>
            </div>
            
            <div id="ai-result-box" style="display:none; margin-top:12px;">
                <div id="ai-loading" style="display:none; text-align:center; padding:20px;">
                    <span class="spinner is-active"></span>
                    <p>در حال پردازش با GapGPT...</p>
                </div>
                <div id="ai-result-content"></div>
            </div>
        </div>
        
        <style>
        .dima-ai-meta-box { padding: 10px 0; }
        .ai-usage-info { margin-bottom: 12px; }
        .usage-bar { height: 6px; background: #e5e7eb; border-radius: 3px; overflow: hidden; margin-bottom: 4px; }
        .usage-fill { height: 100%; background: linear-gradient(90deg, #6366f1, #a855f7); transition: width 0.3s; }
        .ai-actions { display: flex; flex-direction: column; gap: 6px; }
        .ai-btn { text-align: right !important; padding: 8px 12px !important; }
        .ai-btn:hover { background: #f3f4f6 !important; }
        #ai-result-box { background: #f9fafb; border: 1px solid #e5e7eb; border-radius: 8px; padding: 12px; }
        #ai-result-content { max-height: 300px; overflow-y: auto; }
        </style>
        <?php
    }
    
    /**
     * دکمه AI در ویرایشگر
     */
    public function add_ai_media_button() {
        global $post;
        if (!$post || $post->post_type !== 'dima_product') return;
        ?>
        <button type="button" class="button dima-ai-editor-btn" id="dima-ai-editor-btn">
            🤖 دستیار GapGPT
        </button>
        <?php
    }
    
    /**
     * منوی ادمین
     */
    public function add_ai_menu() {
        add_submenu_page(
            'dima-shop',
            'تولید محتوا با GapGPT',
            '🤖 تولید محتوا AI',
            'manage_options',
            'dima-shop-ai',
            array($this, 'render_ai_page')
        );
    }
    
    public function render_ai_page() {
        $filepath = DIMA_SHOP_PATH . 'admin/ai-generator.php';
        if (file_exists($filepath)) {
            include $filepath;
        }
    }
}