<?php
/**
 * توابع کمکی عمومی
 * 
 * @package GNA_LMS
 */

if (!defined('ABSPATH')) {
    exit('دسترسی مستقیم غیرمجاز است.');
}

/**
 * دریافت تنظیمات افزونه
 */
function gna_lms_get_option($option_name, $default = '') {
    $value = get_option($option_name, $default);
    
    // اگر در دیتابیس اختصاصی ذخیره شده باشد
    if (empty($value)) {
        global $wpdb;
        $table = $wpdb->prefix . 'gnalms_settings';
        
        $value = $wpdb->get_var($wpdb->prepare(
            "SELECT option_value FROM {$table} WHERE option_name = %s",
            $option_name
        ));
    }
    
    return $value ?: $default;
}

/**
 * ذخیره تنظیمات افزونه
 */
function gna_lms_update_option($option_name, $option_value) {
    global $wpdb;
    $table = $wpdb->prefix . 'gnalms_settings';
    
    // بررسی وجود تنظیم
    $exists = $wpdb->get_var($wpdb->prepare(
        "SELECT id FROM {$table} WHERE option_name = %s",
        $option_name
    ));
    
    if ($exists) {
        return $wpdb->update(
            $table,
            array(
                'option_value' => maybe_serialize($option_value),
                'updated_at' => current_time('mysql')
            ),
            array('option_name' => $option_name),
            array('%s', '%s'),
            array('%s')
        );
    } else {
        return $wpdb->insert(
            $table,
            array(
                'option_name' => $option_name,
                'option_value' => maybe_serialize($option_value),
                'created_at' => current_time('mysql'),
                'updated_at' => current_time('mysql')
            ),
            array('%s', '%s', '%s', '%s')
        );
    }
}

/**
 * دریافت کاربر فعلی
 */
function gna_lms_get_current_user() {
    if (!is_user_logged_in()) {
        return null;
    }
    
    return wp_get_current_user();
}

/**
 * بررسی دسترسی دانش‌پذیر
 */
function gna_lms_is_student() {
    if (!is_user_logged_in()) {
        return false;
    }
    
    $user = wp_get_current_user();
    return in_array('gna_student', (array) $user->roles);
}

/**
 * بررسی دسترسی مدیر
 */
function gna_lms_is_admin() {
    return current_user_can('manage_gna_lms');
}

/**
 * ایجاد کد رهگیری
 */
function gna_lms_generate_tracking_code() {
    $prefix = 'GNA-';
    $timestamp = time();
    $random = substr(str_shuffle('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'), 0, 6);
    
    return $prefix . $timestamp . $random;
}

/**
 * فرمت‌بندی مبلغ
 */
function gna_lms_format_price($amount) {
    return number_format($amount, 0, '.', ',') . ' تومان';
}

/**
 * فرمت‌بندی حجم فایل
 */
function gna_lms_format_file_size($bytes) {
    if ($bytes >= 1073741824) {
        return number_format($bytes / 1073741824, 2) . ' گیگابایت';
    } elseif ($bytes >= 1048576) {
        return number_format($bytes / 1048576, 2) . ' مگابایت';
    } elseif ($bytes >= 1024) {
        return number_format($bytes / 1024, 2) . ' کیلوبایت';
    } else {
        return $bytes . ' بایت';
    }
}

/**
 * لاگ فعالیت
 */
function gna_lms_log_activity($action, $description = '') {
    global $wpdb;
    $table = $wpdb->prefix . 'gnalms_system_logs';
    
    $user_id = get_current_user_id();
    $ip = GNA_LMS_Security::get_client_ip();
    $user_agent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : '';
    
    return $wpdb->insert(
        $table,
        array(
            'user_id' => $user_id ?: null,
            'action' => $action,
            'description' => $description,
            'ip_address' => $ip,
            'user_agent' => $user_agent,
            'created_at' => current_time('mysql'),
        ),
        array('%d', '%s', '%s', '%s', '%s', '%s')
    );
}

/**
 * ارسال پاسخ JSON
 */
function gna_lms_json_response($success, $data = array(), $message = '') {
    $response = array(
        'success' => $success,
        'data' => $data,
        'message' => $message,
    );
    
    wp_send_json($response);
}

/**
 * دریافت تعداد دوره‌های فعال
 */
function gna_lms_get_active_courses_count() {
    global $wpdb;
    $table = $wpdb->prefix . 'gnalms_courses';
    
    return $wpdb->get_var(
        "SELECT COUNT(*) FROM {$table} 
        WHERE is_active = 1 AND status IN ('pre_registration', 'ongoing')"
    );
}

/**
 * دریافت تعداد دانش‌پذیران
 */
function gna_lms_get_students_count() {
    global $wpdb;
    $table = $wpdb->prefix . 'gnalms_students';
    
    return $wpdb->get_var("SELECT COUNT(*) FROM {$table} WHERE is_active = 1");
}

/**
 * بررسی وجود کاربر با شماره موبایل
 */
function gna_lms_user_exists_by_mobile($mobile) {
    return get_user_by('login', $mobile) !== false;
}

/**
 * ایجاد پیام سیستمی
 */
function gna_lms_set_message($type, $message) {
    if (!isset($_SESSION)) {
        session_start();
    }
    
    $_SESSION['gna_messages'][] = array(
        'type' => $type,
        'message' => $message,
    );
}

/**
 * دریافت پیام‌های سیستمی
 */
function gna_lms_get_messages() {
    if (!isset($_SESSION)) {
        session_start();
    }
    
    $messages = isset($_SESSION['gna_messages']) ? $_SESSION['gna_messages'] : array();
    unset($_SESSION['gna_messages']);
    
    return $messages;
}

/**
 * بررسی موبایل در لیست دانش‌پذیران
 */
function gna_lms_is_registered_student($mobile) {
    global $wpdb;
    $table = $wpdb->prefix . 'gnalms_students';
    
    return $wpdb->get_var($wpdb->prepare(
        "SELECT id FROM {$table} WHERE mobile = %s",
        $mobile
    )) !== null;
}