<?php
ob_start();
date_default_timezone_set('Asia/Shanghai');
session_cache_limiter('private');
header("Cache-Control: private");
header("Expires: ");
ini_set('session.cookie_httponly', 1);
session_start();

// 基础路径配置（和主文件保持一致）
$baseDataDir = __DIR__ . DIRECTORY_SEPARATOR . 'data';
$userFile = $baseDataDir . DIRECTORY_SEPARATOR . 'giftbook_users.json';

if (!is_dir($baseDataDir)) {
    mkdir($baseDataDir, 0755, true);
}
if (!file_exists($userFile)) {
    file_put_contents($userFile, json_encode([], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT | JSON_THROW_ON_ERROR));
}

// 公共函数
function safeReadJson(string $filePath): array
{
    if (!file_exists($filePath)) return [];
    $fp = fopen($filePath, 'r');
    flock($fp, LOCK_SH);
    $raw = fread($fp, filesize($filePath));
    flock($fp, LOCK_UN);
    fclose($fp);
    $data = json_decode($raw, true);
    return is_array($data) ? $data : [];
}

function safeWriteJson(string $filePath, array $data): bool
{
    $fp = fopen($filePath, 'c+');
    if (!$fp) return false;
    flock($fp, LOCK_EX);
    ftruncate($fp, 0);
    $json = json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT | JSON_THROW_ON_ERROR);
    fwrite($fp, $json);
    fflush($fp);
    flock($fp, LOCK_UN);
    fclose($fp);
    return true;
}

// 加载用户数据
$userList = safeReadJson($userFile);
$userId = $_SESSION['giftbook_uid'] ?? 0;
$isLogin = $userId > 0;

// 未登录直接跳转回主页
if (!$isLogin) {
    header("Location: gift_book_main.php");
    exit;
}

$msg = '';
$msgType = 'warning';

// 处理提交
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'change_password') {
    $oldPwd = trim($_POST['old_pwd'] ?? '');
    $newPwd = trim($_POST['new_pwd'] ?? '');
    $confirmPwd = trim($_POST['confirm_pwd'] ?? '');

    if (empty($oldPwd) || empty($newPwd) || empty($confirmPwd)) {
        $msg = "全部字段不能为空";
    } elseif ($newPwd !== $confirmPwd) {
        $msg = "两次输入的新密码不一致";
    } elseif (strlen($newPwd) < 4) {
        $msg = "新密码长度不能少于4位";
    } else {
        $currUser = null;
        foreach ($userList as $u) {
            if (intval($u['user_id']) === $userId) {
                $currUser = $u;
                break;
            }
        }

        if (!$currUser) {
            $msg = "用户信息异常，请重新登录";
        } else {
            $pwdOk = false;
            // 兼容旧md5密码和新password_hash密码
            if (md5($oldPwd) === $currUser['password']) {
                $pwdOk = true;
            } elseif (password_verify($oldPwd, $currUser['password'])) {
                $pwdOk = true;
            }

            if (!$pwdOk) {
                $msg = "原密码错误，请重新输入";
            } else {
                // 更新密码
                foreach ($userList as &$u) {
                    if (intval($u['user_id']) === $userId) {
                        $u['password'] = password_hash($newPwd, PASSWORD_DEFAULT);
                        break;
                    }
                }
                unset($u);
                safeWriteJson($userFile, $userList);

                $msg = "密码修改成功！正在跳转...";
                $msgType = 'success';

                // 3秒后自动跳转回主页面
                header("refresh:3;url=gift_book_main.php");
            }
        }
    }
}
?>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>修改登录密码 - 电子礼簿系统</title>
<style>
:root{
--primary:#4f46e5;
--primary2:#6366f1;
--success:#16a34a;
--warning:#f59e0b;
--danger:#dc2626;
--gray-50:#f9fafb;
--gray-100:#f3f4f6;
--gray-200:#e5e7eb;
--gray-300:#d1d5db;
--gray-600:#4b5563;
--gray-800:#1f2937;
--radius-md:14px;
--radius-lg:20px;
--shadow:0 4px 14px rgba(0,0,0,0.08);
--shadow-lg:0 10px 30px rgba(79,70,229,0.14);
}
*{box-sizing:border-box}
body{
margin:0;
font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
font-size:1rem;
line-height:1.55;
color:var(--gray-800);
background-color:var(--gray-100);
min-height:100vh;
display:flex;
align-items:center;
justify-content:center;
padding:24px;
}
.card{
background-color:#fff;
border-radius:var(--radius-lg);
box-shadow:var(--shadow-lg);
width:100%;
max-width:480px;
overflow:hidden;
}
.card-header{
padding:24px 24px 16px;
text-align:center;
border-bottom:1px solid var(--gray-200);
}
.card-header h3{
margin:0;
font-size:22px;
font-weight:700;
color:var(--gray-800);
}
.card-body{
padding:24px;
}
.form-group{
margin-bottom:16px;
}
.form-label{
display:block;
margin-bottom:6px;
font-size:14px;
font-weight:500;
color:var(--gray-600);
}
.form-control{
display:block;
width:100%;
padding:10px 12px;
font-size:15px;
border:1px solid var(--gray-300);
border-radius:10px;
background:#fff;
transition:all 0.2s ease;
}
.form-control:focus{
outline:none;
border-color:var(--primary);
box-shadow:0 0 0 3px rgba(79, 90, 229, 0.15);
}
.alert{
padding:12px 16px;
border-radius:10px;
margin-bottom:16px;
font-size:14px;
}
.alert-warning{
background-color:#fffbeb;
color:#92400e;
border:1px solid #fde68a;
}
.alert-success{
background-color:#dcfce7;
color:#166534;
border:1px solid #86efac;
}
.btn-group{
display:flex;
gap:12px;
margin-top:20px;
}
.btn{
flex:1;
padding:12px 16px;
border:none;
border-radius:10px;
font-size:15px;
font-weight:500;
cursor:pointer;
transition:all 0.2s ease;
}
.btn-primary{
background-color:var(--primary);
color:#fff;
}
.btn-primary:hover{
background-color:#4338ca;
}
.btn-secondary{
background-color:var(--gray-200);
color:var(--gray-800);
}
.btn-secondary:hover{
background-color:var(--gray-300);
}
.text-danger{
color:var(--danger);
}
</style>
</head>
<body>

<div class="card">
    <div class="card-header">
        <h3>修改登录密码</h3>
    </div>
    <div class="card-body">
        <?php if (!empty($msg)): ?>
        <div class="alert alert-<?=$msgType?>">
            <?=$msg?>
        </div>
        <?php endif; ?>

        <form method="post">
            <input type="hidden" name="action" value="change_password">

            <div class="form-group">
                <label class="form-label">原登录密码 <span class="text-danger">*</span></label>
                <input type="password" name="old_pwd" class="form-control" placeholder="请输入当前登录密码" required>
            </div>

            <div class="form-group">
                <label class="form-label">新登录密码 <span class="text-danger">*</span></label>
                <input type="password" name="new_pwd" class="form-control" placeholder="请输入新密码，至少4位" required>
            </div>

            <div class="form-group">
                <label class="form-label">确认新密码 <span class="text-danger">*</span></label>
                <input type="password" name="confirm_pwd" class="form-control" placeholder="请再次输入新密码" required>
            </div>

            <div class="btn-group">
                <a href="gift_book_main.php" class="btn btn-secondary" style="text-align:center;text-decoration:none;">返回</a>
                <button type="submit" class="btn btn-primary">确认修改</button>
            </div>
        </form>
    </div>
</div>

</body>
</html>
<?php
ob_end_flush();
?>
