<?php
// ========================================
// صفحه تغییر رمز عبور با توکن
// ========================================
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: index.php'); exit; }

$pageTitle = 'تغییر رمز عبور | کیف‌لند';
$success = ''; $error = '';
$token   = trim($_GET['token'] ?? '');
$valid   = false;
$resetUser = null;

// بررسی توکن
if (!empty($token)) {
    $db   = Database::getInstance()->getConnection();
    $stmt = $db->prepare("SELECT pr.*, u.id as user_id, u.full_name, u.email as user_email FROM password_resets pr JOIN users u ON pr.email = u.email WHERE pr.token = ? AND pr.used = 0 AND pr.expires_at > NOW() LIMIT 1");
    $stmt->execute([$token]);
    $resetUser = $stmt->fetch();
    $valid = (bool)$resetUser;
}

if (!$valid && empty($success)) {
    $error = 'لینک بازیابی نامعتبر یا منقضی شده است.';
}

if ($_SERVER['REQUEST_METHOD'] === 'POST' && $valid) {
    if (!Auth::verifyCSRFToken($_POST['csrf_token'] ?? '')) {
        $error = 'خطای امنیتی. صفحه را رفرش کنید.';
    } else {
        $password = $_POST['password'] ?? '';
        $confirm  = $_POST['password_confirm'] ?? '';

        if (strlen($password) < 8) {
            $error = 'رمز عبور باید حداقل ۸ کاراکتر باشد.';
        } elseif ($password !== $confirm) {
            $error = 'رمز عبور و تکرار آن یکسان نیستند.';
        } elseif (!preg_match('/[0-9]/', $password)) {
            $error = 'رمز عبور باید حداقل یک عدد داشته باشد.';
        } else {
            try {
                $db->beginTransaction();
                Auth::updateUserPassword($resetUser['user_id'], $password);
                $db->prepare("UPDATE password_resets SET used = 1 WHERE token = ?")->execute([$token]);
                // حذف همه session‌های کاربر (امنیت)
                $db->prepare("UPDATE users SET remember_token = NULL WHERE id = ?")->execute([$resetUser['user_id']]);
                $db->commit();
                Auth::logActivity('password_reset_success', 'تغییر موفق پسورد: ' . $resetUser['user_email'], $resetUser['user_id']);
                $success = 'رمز عبور با موفقیت تغییر کرد. اکنون می‌توانید وارد شوید.';
                $valid   = false;
            } catch (Exception $e) {
                $db->rollBack();
                $error = 'خطا در تغییر رمز. لطفاً دوباره تلاش کنید.';
                error_log("Reset password error: " . $e->getMessage());
            }
        }
    }
}

$csrfToken = Auth::generateCSRFToken();
include 'includes/header.php';
?>

<section class="auth-section">
    <div class="auth-box">
        <div style="text-align:center;margin-bottom:24px;">
            <div style="width:64px;height:64px;background:rgba(16,185,129,0.1);border-radius:50%;display:flex;align-items:center;justify-content:center;margin:0 auto 16px;border:1px solid rgba(16,185,129,0.2);">
                <i class="fas fa-key" style="font-size:1.6rem;color:var(--primary);"></i>
            </div>
            <h2 style="margin-bottom:8px;">تغییر رمز عبور</h2>
            <?php if ($resetUser): ?>
            <p style="color:var(--text-secondary);font-size:0.9rem;">سلام <strong><?= htmlspecialchars($resetUser['full_name']) ?></strong>، رمز جدید خود را وارد کنید.</p>
            <?php endif; ?>
        </div>

        <?php if ($success): ?>
        <div class="alert alert-success"><i class="fas fa-check-circle"></i> <?= htmlspecialchars($success) ?></div>
        <div style="text-align:center;margin-top:20px;">
            <a href="login.php" class="btn btn-primary"><i class="fas fa-sign-in-alt"></i> ورود به حساب</a>
        </div>

        <?php elseif (!$valid): ?>
        <div class="alert alert-danger"><i class="fas fa-exclamation-circle"></i> <?= htmlspecialchars($error) ?></div>
        <div style="text-align:center;margin-top:20px;">
            <a href="forgot-password.php" class="btn btn-primary"><i class="fas fa-redo"></i> درخواست مجدد</a>
        </div>

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

        <form method="POST" class="auth-form" data-single-submit>
            <input type="hidden" name="csrf_token" value="<?= htmlspecialchars($csrfToken) ?>">
            <div class="form-group">
                <label>رمز عبور جدید</label>
                <div style="position:relative;">
                    <input type="password" name="password" id="newPass" required minlength="8" placeholder="حداقل ۸ کاراکتر">
                    <button type="button" onclick="togglePass('newPass','eye1')"
                        style="position:absolute;left:12px;top:50%;transform:translateY(-50%);background:none;border:none;color:var(--text-secondary);cursor:pointer;font-size:1rem;">
                        <i class="fas fa-eye" id="eye1"></i>
                    </button>
                </div>
            </div>
            <div class="form-group">
                <label>تکرار رمز عبور</label>
                <div style="position:relative;">
                    <input type="password" name="password_confirm" id="confPass" required minlength="8" placeholder="رمز عبور را دوباره وارد کنید">
                    <button type="button" onclick="togglePass('confPass','eye2')"
                        style="position:absolute;left:12px;top:50%;transform:translateY(-50%);background:none;border:none;color:var(--text-secondary);cursor:pointer;font-size:1rem;">
                        <i class="fas fa-eye" id="eye2"></i>
                    </button>
                </div>
            </div>

            <!-- نمایش قدرت رمز -->
            <div id="passStrength" style="margin-top:-8px;display:none;">
                <div style="height:4px;background:var(--glass-border);border-radius:4px;overflow:hidden;margin-bottom:4px;">
                    <div id="strengthBar" style="height:100%;width:0;transition:all 0.3s;border-radius:4px;"></div>
                </div>
                <small id="strengthText" style="color:var(--text-secondary);font-size:0.78rem;"></small>
            </div>

            <button type="submit" class="btn btn-primary btn-block">
                <i class="fas fa-check"></i> تغییر رمز عبور
            </button>
        </form>
        <?php endif; ?>
    </div>
</section>

<script>
function togglePass(inputId, iconId) {
    const inp  = document.getElementById(inputId);
    const icon = document.getElementById(iconId);
    if (inp.type === 'password') { inp.type = 'text'; icon.className = 'fas fa-eye-slash'; }
    else { inp.type = 'password'; icon.className = 'fas fa-eye'; }
}

document.getElementById('newPass')?.addEventListener('input', function() {
    const v = this.value;
    const wrap = document.getElementById('passStrength');
    const bar  = document.getElementById('strengthBar');
    const txt  = document.getElementById('strengthText');
    if (!v) { wrap.style.display='none'; return; }
    wrap.style.display = 'block';

    let score = 0;
    if (v.length >= 8)  score++;
    if (v.length >= 12) score++;
    if (/[0-9]/.test(v)) score++;
    if (/[a-zA-Z]/.test(v)) score++;
    if (/[^a-zA-Z0-9]/.test(v)) score++;

    const levels = [
        { w:'20%', c:'#ef4444', t:'خیلی ضعیف' },
        { w:'40%', c:'#f97316', t:'ضعیف' },
        { w:'60%', c:'#f59e0b', t:'متوسط' },
        { w:'80%', c:'#84cc16', t:'قوی' },
        { w:'100%',c:'#10b981', t:'خیلی قوی' },
    ];
    const l = levels[Math.min(score-1, 4)] || levels[0];
    bar.style.width = l.w;
    bar.style.background = l.c;
    txt.textContent = l.t;
    txt.style.color = l.c;
});
</script>

<?php include 'includes/footer.php'; ?>
