<?php
// ========================================
// پیام‌ها و پشتیبانی - نسخه امن‌شده
// ========================================
session_start();
require_once 'config/database.php';
require_once 'config/settings.php';
require_once 'includes/auth.php';
require_once 'includes/functions.php';

if (!Auth::isLoggedIn()) {
    header('Location: login.php?redirect=messages.php');
    exit;
}

Auth::checkSessionTimeout();

$db      = Database::getInstance()->getConnection();
$user_id = $_SESSION['user_id'];
$pageTitle = 'پیام‌ها و پشتیبانی | کیف‌لند';
$success = ''; $error = '';

if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['send_message'])) {

    // CSRF
    if (!Auth::verifyCSRFToken($_POST['csrf_token'] ?? '')) {
        $error = 'خطای امنیتی. لطفاً صفحه را رفرش کنید.';
    }
    // Rate limit: حداکثر ۵ پیام در ساعت
    elseif (Auth::isFormRateLimited('message_' . $user_id, 5)) {
        $error = 'شما بیش از حد مجاز پیام ارسال کرده‌اید. لطفاً یک ساعت دیگر تلاش کنید.';
    } else {
        $subject = trim($_POST['subject'] ?? '');
        $message = trim($_POST['message'] ?? '');
        $phone   = trim($_POST['phone'] ?? $_SESSION['phone'] ?? '');
        $attachment_path = null;

        // اعتبارسنجی امن فایل
        if (!empty($_FILES['attachment']['name'])) {
            $validation = Auth::validateImageUpload($_FILES['attachment']);
            if (!$validation['ok']) {
                $error = $validation['error'];
            } else {
                $ext      = pathinfo($_FILES['attachment']['name'], PATHINFO_EXTENSION);
                $filename = 'msg_' . $user_id . '_' . time() . '_' . bin2hex(random_bytes(4)) . '.' . strtolower($ext);
                $dir      = 'uploads/messages/';
                if (!is_dir($dir)) mkdir($dir, 0755, true);
                if (move_uploaded_file($_FILES['attachment']['tmp_name'], $dir . $filename)) {
                    $attachment_path = $dir . $filename;
                } else {
                    $error = 'خطا در ذخیره فایل.';
                }
            }
        }

        if (empty($error)) {
            if (empty($subject)) {
                $error = 'موضوع پیام الزامی است';
            } elseif (mb_strlen($subject) > 200) {
                $error = 'موضوع پیام نباید بیشتر از ۲۰۰ کاراکتر باشد';
            } elseif (empty($message)) {
                $error = 'متن پیام الزامی است';
            } elseif (mb_strlen($message) > 5000) {
                $error = 'متن پیام نباید بیشتر از ۵۰۰۰ کاراکتر باشد';
            } else {
                try {
                    $stmt = $db->prepare("INSERT INTO messages (user_id, name, email, phone, subject, message, attachment, status, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, 'unread', NOW(), NOW())");
                    $stmt->execute([$user_id, $_SESSION['full_name'] ?? 'کاربر', $_SESSION['email'] ?? '', $phone, $subject, $message, $attachment_path]);
                    $success = 'پیام شما با موفقیت ثبت شد. تیم پشتیبانی در اسرع وقت پاسخ خواهد داد.';
                    Auth::logActivity('user_message_send', "کاربر #$user_id پیام جدید ارسال کرد");

                    // اعلان تلگرام
                    try {
                        require_once 'config/telegram.php';
                        $telegram = new TelegramBot();
                        if ($telegram->isConfigured()) {
                            $telegram->sendNewMessageNotification(
                                $_SESSION['full_name'] ?? 'کاربر',
                                $_SESSION['email'] ?? '',
                                $subject,
                                $message,
                                $attachment_path
                            );
                        }
                    } catch (Exception $e) { error_log("Telegram error: " . $e->getMessage()); }
                } catch (Exception $e) {
                    error_log("User Message Error: " . $e->getMessage());
                    $error = 'خطا در ثبت پیام. لطفاً مجدداً تلاش کنید.';
                }
            }
        }
    }
}

$stmt = $db->prepare("SELECT id, subject, message, attachment, status, admin_reply, created_at FROM messages WHERE user_id = ? ORDER BY created_at DESC");
$stmt->execute([$user_id]);
$user_messages = $stmt->fetchAll();

$csrfToken = Auth::generateCSRFToken();
?>
<!DOCTYPE html>
<html lang="fa" dir="rtl">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title><?= htmlspecialchars($pageTitle) ?></title>
    <link href="https://fonts.googleapis.com/css2?family=Vazirmatn:wght@300;400;500;600;700&display=swap" rel="stylesheet">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
    <link rel="stylesheet" href="assets/css/style.css">
    <style>
        :root { --primary:#007AFF;--success:#34C759;--warning:#FF9500;--danger:#FF3B30;--glass-bg:rgba(255,255,255,0.65);--glass-border:rgba(255,255,255,0.8);--text-primary:#1d1d1f;--text-secondary:#86868b; }
        body{font-family:'Vazirmatn',sans-serif;background:linear-gradient(135deg,#f5f7fa 0%,#c3cfe2 100%);min-height:100vh;padding:20px;margin:0;}
        .container{max-width:860px;margin:0 auto;}
        .glass-card{background:var(--glass-bg);backdrop-filter:blur(20px) saturate(160%);-webkit-backdrop-filter:blur(20px) saturate(160%);border:1px solid var(--glass-border);border-radius:16px;padding:24px;box-shadow:0 4px 20px rgba(0,0,0,0.08);margin-bottom:20px;}
        .form-group{margin-bottom:16px;}
        .form-label{display:block;font-weight:500;margin-bottom:6px;color:var(--text-primary);}
        .form-input,.form-textarea{width:100%;padding:12px 14px;border:1px solid #ddd;border-radius:10px;font-family:inherit;font-size:14px;background:rgba(255,255,255,0.5);transition:0.2s;box-sizing:border-box;}
        .form-input:focus,.form-textarea:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px rgba(0,122,255,0.15);background:#fff;}
        .btn{padding:10px 20px;border-radius:10px;border:none;font-weight:600;cursor:pointer;transition:0.2s;font-family:inherit;display:inline-flex;align-items:center;gap:6px;}
        .btn-primary{background:var(--primary);color:white;}
        .btn-primary:hover{background:#0056b3;transform:translateY(-1px);}
        .alert{padding:12px 16px;border-radius:10px;margin-bottom:16px;font-size:14px;display:flex;align-items:center;gap:8px;}
        .alert-success{background:#d4edda;color:#155724;border:1px solid #c3e6cb;}
        .alert-danger{background:#f8d7da;color:#721c24;border:1px solid #f5c6cb;}
        .msg-item{border-bottom:1px solid rgba(0,0,0,0.06);padding:16px 0;}
        .msg-item:last-child{border-bottom:none;}
        .msg-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px;flex-wrap:wrap;gap:8px;}
        .msg-title{font-weight:600;color:var(--text-primary);}
        .msg-status{font-size:11px;padding:4px 8px;border-radius:20px;font-weight:600;}
        .status-unread{background:#fff3cd;color:#856404;}.status-read{background:#d1ecf1;color:#0c5460;}.status-replied{background:#d4edda;color:#155724;}.status-archived{background:#e2e3e5;color:#383d41;}
        .msg-text{color:var(--text-secondary);font-size:14px;line-height:1.7;margin-bottom:8px;white-space:pre-wrap;word-break:break-word;}
        .admin-reply{background:rgba(0,122,255,0.08);border-right:3px solid var(--primary);padding:12px;border-radius:8px;margin-top:8px;font-size:14px;color:#333;line-height:1.6;}
        .empty-state{text-align:center;padding:40px 20px;color:var(--text-secondary);}
        .header-actions{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px;flex-wrap:wrap;gap:12px;}
        h1{font-size:22px;margin:0;color:var(--text-primary);display:flex;align-items:center;gap:8px;}
        .back-btn{color:var(--primary);text-decoration:none;font-weight:500;display:inline-flex;align-items:center;gap:6px;transition:0.2s;}
        .back-btn:hover{text-decoration:underline;opacity:0.8;}
        .upload-area{border:2px dashed #ccc;border-radius:12px;padding:20px;text-align:center;cursor:pointer;transition:0.2s;background:rgba(255,255,255,0.3);position:relative;}
        .upload-area:hover,.upload-area.dragover{border-color:var(--primary);background:rgba(0,122,255,0.05);}
        .upload-area input[type=file]{position:absolute;inset:0;opacity:0;cursor:pointer;width:100%;height:100%;}
        .upload-area i{font-size:28px;color:#aaa;margin-bottom:8px;display:block;}
        .upload-area span{font-size:13px;color:var(--text-secondary);}
        .upload-preview{margin-top:10px;display:none;}
        .upload-preview img{max-width:100%;max-height:200px;border-radius:10px;border:1px solid #ddd;object-fit:contain;}
        .remove-img{background:var(--danger);color:white;border:none;border-radius:6px;padding:4px 10px;font-size:12px;cursor:pointer;margin-top:6px;display:inline-flex;align-items:center;gap:4px;font-family:inherit;}
        .lightbox{display:none;position:fixed;inset:0;background:rgba(0,0,0,0.85);z-index:9999;align-items:center;justify-content:center;}
        .lightbox.active{display:flex;}
        .lightbox img{max-width:90vw;max-height:90vh;border-radius:12px;box-shadow:0 8px 40px rgba(0,0,0,0.4);}
        .lightbox-close{position:fixed;top:20px;left:20px;background:white;border:none;border-radius:50%;width:40px;height:40px;font-size:20px;cursor:pointer;display:flex;align-items:center;justify-content:center;}
        .msg-attachment img{max-width:220px;border-radius:10px;margin-top:8px;cursor:pointer;border:1px solid #ddd;transition:0.2s;}
        .msg-attachment img:hover{opacity:0.85;transform:scale(1.02);}
        @media(max-width:600px){.container{padding:0 10px;}.glass-card{padding:16px;}h1{font-size:18px;}}
    </style>
</head>
<body>
<div class="container">
    <div class="header-actions">
        <h1><i class="fas fa-headset" style="color:var(--primary);"></i> پیام‌ها و پشتیبانی</h1>
        <a href="profile.php" class="back-btn"><i class="fas fa-arrow-right"></i> بازگشت به پروفایل</a>
    </div>

    <?php if ($error):   ?><div class="alert alert-danger" ><i class="fas fa-exclamation-circle"></i> <?= htmlspecialchars($error)   ?></div><?php endif; ?>
    <?php if ($success): ?><div class="alert alert-success"><i class="fas fa-check-circle"></i>       <?= htmlspecialchars($success) ?></div><?php endif; ?>

    <div class="glass-card">
        <h2 style="margin-bottom:16px;font-size:18px;"><i class="fas fa-paper-plane" style="color:var(--primary);margin-left:6px;"></i> ارسال پیام جدید</h2>
        <form method="POST" enctype="multipart/form-data">
            <input type="hidden" name="csrf_token" value="<?= htmlspecialchars($csrfToken) ?>">
            <div class="form-group">
                <label class="form-label">موضوع پیام <span style="color:var(--danger)">*</span></label>
                <input type="text" name="subject" class="form-input" required maxlength="200" placeholder="مثال: پیگیری سفارش، مشکل در پرداخت...">
            </div>
            <div class="form-group">
                <label class="form-label">شماره تماس (اختیاری)</label>
                <input type="tel" name="phone" class="form-input" placeholder="09xxxxxxxxx" value="<?= htmlspecialchars($_SESSION['phone'] ?? '') ?>">
            </div>
            <div class="form-group">
                <label class="form-label">متن پیام <span style="color:var(--danger)">*</span></label>
                <textarea name="message" class="form-textarea" rows="5" required maxlength="5000" placeholder="جزئیات درخواست خود را کامل شرح دهید..."></textarea>
            </div>
            <div class="form-group">
                <label class="form-label">پیوست تصویر (اختیاری)</label>
                <div class="upload-area" id="uploadArea">
                    <input type="file" name="attachment" id="attachmentInput" accept="image/jpeg,image/png,image/gif,image/webp">
                    <i class="fas fa-cloud-upload-alt"></i>
                    <span id="uploadText">کلیک کنید یا تصویر را اینجا بکشید<br><small>JPG، PNG، GIF، WEBP — حداکثر ۳ مگابایت</small></span>
                </div>
                <div class="upload-preview" id="uploadPreview">
                    <img id="previewImg" src="" alt="پیش‌نمایش"><br>
                    <button type="button" class="remove-img" id="removeImg"><i class="fas fa-times"></i> حذف تصویر</button>
                </div>
            </div>
            <button type="submit" name="send_message" class="btn btn-primary"><i class="fas fa-paper-plane"></i> ارسال پیام</button>
        </form>
    </div>

    <div class="glass-card">
        <h2 style="margin-bottom:16px;font-size:18px;"><i class="fas fa-history" style="color:var(--primary);margin-left:6px;"></i> تاریخچه پیام‌ها</h2>
        <?php if (!empty($user_messages)): ?>
            <?php foreach ($user_messages as $msg): ?>
            <div class="msg-item">
                <div class="msg-header">
                    <span class="msg-title"><?= htmlspecialchars($msg['subject'] ?: 'بدون موضوع') ?></span>
                    <span class="msg-status status-<?= htmlspecialchars($msg['status']) ?>">
                        <?= match($msg['status']) { 'unread'=>'خوانده‌نشده','read'=>'خوانده‌شده','replied'=>'پاسخ داده‌شده','archived'=>'بایگانی',default=>'در انتظار' } ?>
                    </span>
                </div>
                <div class="msg-text"><?= nl2br(htmlspecialchars($msg['message'])) ?></div>
                <?php if (!empty($msg['attachment'])): ?>
                <div class="msg-attachment">
                    <img src="<?= htmlspecialchars($msg['attachment']) ?>" alt="پیوست" onclick="openLightbox(this.src)">
                </div>
                <?php endif; ?>
                <div style="font-size:12px;color:var(--text-secondary);margin-top:6px;"><i class="far fa-clock"></i> <?= jdate($msg['created_at']) ?></div>
                <?php if (!empty($msg['admin_reply'])): ?>
                <div class="admin-reply">
                    <strong style="color:var(--primary);display:block;margin-bottom:6px;"><i class="fas fa-user-shield"></i> پاسخ پشتیبانی:</strong>
                    <?= nl2br(htmlspecialchars($msg['admin_reply'])) ?>
                </div>
                <?php endif; ?>
            </div>
            <?php endforeach; ?>
        <?php else: ?>
            <div class="empty-state">
                <i class="far fa-comment-dots" style="font-size:48px;opacity:0.3;margin-bottom:12px;display:block;"></i>
                <p>هنوز پیامی ثبت نکرده‌اید.</p>
            </div>
        <?php endif; ?>
    </div>
</div>

<div class="lightbox" id="lightbox" onclick="closeLightbox()">
    <button class="lightbox-close" onclick="closeLightbox()">&times;</button>
    <img id="lightboxImg" src="" alt="تصویر پیوست">
</div>

<script src="assets/js/script.js"></script>
<script>
const input = document.getElementById('attachmentInput');
const preview = document.getElementById('uploadPreview');
const previewImg = document.getElementById('previewImg');
const area = document.getElementById('uploadArea');
const removeBtn = document.getElementById('removeImg');
const uploadText = document.getElementById('uploadText');

input.addEventListener('change', function() {
    const file = this.files[0];
    if (!file) return;
    if (file.size > 3 * 1024 * 1024) { alert('حجم فایل نباید بیشتر از ۳ مگابایت باشد.'); this.value = ''; return; }
    const reader = new FileReader();
    reader.onload = e => { previewImg.src = e.target.result; preview.style.display = 'block'; uploadText.style.display = 'none'; };
    reader.readAsDataURL(file);
});
removeBtn.addEventListener('click', () => { input.value = ''; previewImg.src = ''; preview.style.display = 'none'; uploadText.style.display = ''; });
area.addEventListener('dragover', e => { e.preventDefault(); area.classList.add('dragover'); });
area.addEventListener('dragleave', () => area.classList.remove('dragover'));
area.addEventListener('drop', e => {
    e.preventDefault(); area.classList.remove('dragover');
    const file = e.dataTransfer.files[0];
    if (file && file.type.startsWith('image/')) { const dt = new DataTransfer(); dt.items.add(file); input.files = dt.files; input.dispatchEvent(new Event('change')); }
});
function openLightbox(src) { document.getElementById('lightboxImg').src = src; document.getElementById('lightbox').classList.add('active'); }
function closeLightbox() { document.getElementById('lightbox').classList.remove('active'); }
document.addEventListener('keydown', e => { if (e.key === 'Escape') closeLightbox(); });
</script>
</body>
</html>
