<?php
session_start();
require_once __DIR__ . '/bootstrap.php';
require_once PRIVATE_PATH . '/layout.php';
$db = Database::get(); $b = BASE_URL;
$isAdminLoggedIn = !empty($_SESSION['admin_logged']);

$adminReplyName = $isAdminLoggedIn ? (setting('admin_reply_name','') ?: setting('admin_user','Admin')) : '';
$slug = $_GET['s'] ?? '';
if (!$slug) { header('Location: '.$b.'/'); exit; }
$stmt = $db->prepare("SELECT * FROM posts WHERE slug=? AND is_published=1"); $stmt->execute([$slug]);
$post = $stmt->fetch(PDO::FETCH_ASSOC);
if (($post['slug']??'') === '大母鹅修改器合集') { header('Location: '.url_collection(), true, 301); exit; }
if (!$post) { header('Location: '.$b.'/'); exit; }
$loginRequired = !empty($post['login_to_comment']) && empty($_SESSION['user_id']) && !$isAdminLoggedIn;
try { $db->prepare("UPDATE posts SET view_count=view_count+1 WHERE id=?")->execute([$post['id']]); $post['view_count']++; } catch (\Throwable $e) { /* 浏览量自增失败（如瞬时锁库）不影响文章访问 */ }
$commentsOn = setting('comments_global','1')==='1' && ($post['comments_enabled']??1);
$cms = $db->prepare("SELECT * FROM comments WHERE post_id=? AND is_approved=1 ORDER BY created_at DESC");
$cms->execute([$post['id']]); $cList = $cms->fetchAll(PDO::FETCH_ASSOC);
$hasLocked = !empty(trim($post["locked_content"]??""));
$currentLang = $_COOKIE['site_lang'] ?? 'zh';
if (isset($_GET['lang'])) $currentLang = $_GET['lang']==='en'?'en':'zh';
$trans = null;
if ($currentLang === 'en') {
    try { $ts=$db->prepare("SELECT title,excerpt,content FROM translations WHERE post_id=? AND lang='en'"); $ts->execute([$post['id']]); $trans=$ts->fetch(PDO::FETCH_ASSOC); } catch(Exception $e) {}
}
$displayTitle = ($trans && $trans['title']) ? $trans['title'] : $post['title'];
$lockedPos = setting("locked_position","bottom");
$cmtPos = setting('comment_position','bottom');
$htmlContent = renderContent($post['content']);
// Sidebar data
$hotPosts = $db->query("SELECT id,title,slug,view_count,cover_image,content FROM posts WHERE is_published=1 AND id!=".$post['id']." ORDER BY view_count DESC LIMIT 6")->fetchAll(PDO::FETCH_ASSOC);
$randPosts = $db->query("SELECT title,slug FROM posts WHERE is_published=1 AND id!=".$post['id']." ORDER BY RANDOM() LIMIT 5")->fetchAll(PDO::FETCH_ASSOC);
$hotComments = $db->query("SELECT c.content,c.name,c.post_id,p.slug,p.title as ptitle FROM comments c JOIN posts p ON c.post_id=p.id WHERE c.is_approved=1 ORDER BY c.created_at DESC LIMIT 6")->fetchAll(PDO::FETCH_ASSOC);
// Generate SEO description（英文页用英文翻译，中文页用中文）
if ($currentLang==='en' && $trans) {
    $seoDescRaw = $trans['excerpt'] ?: mb_substr(strip_tags($trans['content']?:''), 0, 160);
} else {
    $seoDescRaw = $post['excerpt'] ?: mb_substr(strip_tags($post['content']), 0, 160);
}
$seoDesc = str_replace(['"', "'", "\n", "\r"], ' ', $seoDescRaw);
$coverUrl = $post['cover_image'] ?: setting('default_cover');
$siteUrl = rtrim(setting('site_url','https://www.loxin.top'),'/');
$postPath = '/post.php?s='.urlencode($post['slug']);
$urlZh = $siteUrl.$postPath;             // 中文页 canonical
$urlEn = $siteUrl.$postPath.'&lang=en';  // 英文页 canonical
// 把这篇文章的中/英对照 URL 交给 render_head，用于 canonical + hreflang。
$GLOBALS['SEO_ALT'] = ['zh'=>$urlZh, 'en'=>$urlEn];
$articleUrl = ($currentLang==='en') ? $urlEn : $urlZh;
$isTrainer = setting('site_theme','blog')==='trainer';
$absoluteCover = $coverUrl;
if($absoluteCover && !preg_match('#^https?://#i',$absoluteCover)) $absoluteCover = $siteUrl.'/'.ltrim($absoluteCover,'/');
$GLOBALS['SEO_META'] = ['title'=>$displayTitle,'description'=>$seoDesc,'keywords'=>$post['tags'] ?: $post['category'],'image'=>$absoluteCover,'type'=>'article'];
$publisherId = $siteUrl.'/#organization';
$graph = [
    ['@type'=>'Organization','@id'=>$publisherId,'name'=>setting('site_name'),'url'=>$siteUrl.'/','logo'=>setting('logo_url') ?: null],
    ['@type'=>'BreadcrumbList','@id'=>$articleUrl.'#breadcrumb','itemListElement'=>[
        ['@type'=>'ListItem','position'=>1,'name'=>__('首页','Home'),'item'=>$siteUrl.'/'],
        ['@type'=>'ListItem','position'=>2,'name'=>t($post['category']),'item'=>$siteUrl.'/?cat='.urlencode($post['category'])],
        ['@type'=>'ListItem','position'=>3,'name'=>$displayTitle,'item'=>$articleUrl]
    ]],
    ['@type'=>'BlogPosting','@id'=>$articleUrl.'#article','headline'=>$displayTitle,'description'=>$seoDesc,'image'=>$absoluteCover,'inLanguage'=>$currentLang==='en'?'en':'zh-CN','datePublished'=>date('c',strtotime($post['created_at'])),'dateModified'=>date('c',strtotime($post['updated_at']?:$post['created_at'])),'author'=>['@id'=>$publisherId],'publisher'=>['@id'=>$publisherId],'mainEntityOfPage'=>$articleUrl,'breadcrumb'=>['@id'=>$articleUrl.'#breadcrumb']]
];
if($isTrainer) $graph[] = ['@type'=>'SoftwareApplication','@id'=>$articleUrl.'#trainer','name'=>$displayTitle,'description'=>$seoDesc,'image'=>$absoluteCover,'url'=>$articleUrl,'applicationCategory'=>'GameApplication','operatingSystem'=>'Windows','dateModified'=>date('c',strtotime($post['updated_at']?:$post['created_at'])),'author'=>['@id'=>$publisherId]];
$GLOBALS['SEO_JSONLD'] = ['@context'=>'https://schema.org','@graph'=>$graph];
render_head($displayTitle);
render_nav();
?>
<script>window.BASE_URL="<?=$b?>";window.POST_ID=<?=$post['id']?>;</script>
<main id="mainContent" class="site-main post-page">
<?php if($isTrainer): ?>
<?php $feats=json_decode($post['features']??'[]',true)?:[]; $status=$post['product_status']??'live';
  $dlUrl=$post['download_url']??'';$dlText=$post['download_text']??'';
  if($dlUrl&&!preg_match('#^(https?://|/|mailto:)#i',$dlUrl))$dlUrl='https://'.$dlUrl;
  $hasDl=!empty($dlUrl);
  $headerMax = ($cmtPos==='left') ? '1500px' : '1100px';
?>
<section class="post-header-wrap" aria-labelledby="trainerTitle">
<div class="trainer-detail-header">
    <div class="detail-particle-layer" id="detailParticleLayer" aria-hidden="true"></div>
    <?php if($coverUrl):?><figure class="trainer-detail-cover"><img src="<?=safe($coverUrl)?>" alt="<?=safe($displayTitle)?>" fetchpriority="high" decoding="async"></figure><?php endif;?>
    <div class="trainer-detail-info">
      <div class="detail-kicker">
        <span class="trainer-status <?=safe($status)?>"><?php
          if($status==='live') echo __('✓ 可用','✓ Live');
          elseif($status==='updating') echo __('↻ 更新中','↻ Updating');
          else echo __('⏳ 即将推出','⏳ Soon');
        ?></span>
        <span class="detail-category"><?=safe(t($post['category']))?></span>
      </div>
      <h1 id="trainerTitle"><?=safe($displayTitle)?></h1>
      <?php $excerpt = ($currentLang==='en'&&$trans&&$trans['excerpt']) ? $trans['excerpt'] : ($post['excerpt']??'');
      if($excerpt):?><p class="trainer-detail-excerpt"><?=safe($excerpt)?></p><?php endif;?>
      <div class="trainer-detail-meta">
        <span><b aria-hidden="true">◫</b> <?=date('Y-m-d',strtotime($post['created_at']))?></span>
        <span><b aria-hidden="true">◉</b> <?=$post['view_count']?> <?=__('浏览','Views')?></span>
        <span><b aria-hidden="true">◇</b> <?=count($cList)?> <?=__('评论','Comments')?></span>
        <?php if($post['game_engine']??''):?><span><b aria-hidden="true">⌁</b> <?=safe(getTagTranslation($post['game_engine']))?></span><?php endif;?>
      </div>
      <?php if(!empty($feats)):?><div class="trainer-detail-features"><?php foreach($feats as $f):?><?=renderFeatureTag($f)?><?php endforeach;?></div><?php endif;?>
      <div class="detail-actions">
        <?php if($hasDl):?>
        <a href="<?=safe($dlUrl)?>" target="_blank" rel="noopener" class="detail-primary"><?=safe(getTagTranslation($dlText)?:__('前往下载','Go to download'))?> →</a>
        <?php elseif($hasLocked && $dlText):?>
        <a href="#commentsSection" class="detail-primary" onclick="document.getElementById('commentsSection')?.scrollIntoView({behavior:'smooth',block:'start'});return false"><?=safe(getTagTranslation($dlText))?> 🔒</a>
        <span class="detail-unlock-hint"><?=__('评论后自动解锁','Unlocks after commenting')?></span>
        <?php endif;?>
        <button type="button" class="detail-share" data-label="<?=__('分享','Share')?>" data-copied="<?=__('已复制','Copied')?>" onclick="var el=this;navigator.clipboard.writeText(location.href).then(function(){el.textContent='✓ '+el.dataset.copied;setTimeout(function(){el.textContent='↗ '+el.dataset.label},1500)})">↗ <?=__('分享','Share')?></button>
      </div>
    </div>
  </div>
</section>
<?php endif; /* end isTrainer header */ ?>

<?php /* ========= CONTENT LAYOUT ========= */ ?>
<?php if($cmtPos==="left"): ?>
<div class="post-layout-3col <?=$isTrainer?'trainer-content-shell':''?>"<?php if(!$isTrainer):?> style="max-width:1500px;margin:4.5rem auto 2rem;padding:0 2rem;display:grid;grid-template-columns:320px 1fr 220px;gap:1.5rem;align-items:start"<?php endif;?>>
<?php else: ?>
<div class="post-layout <?=$isTrainer?'trainer-content-shell':''?>"<?php if(!$isTrainer):?> style="max-width:1100px"<?php endif;?>>
<?php endif; ?>

  <?php if($cmtPos==='left' && $commentsOn): ?>
  <div id="commentsSection" class="comments-left" style="background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:.8rem;transition:transform .3s,box-shadow .3s">
    <div style="display:flex;justify-content:space-between;align-items:center;margin-bottom:.5rem">
      <h4 style="font-size:.82rem;margin:0">💬 <?=__('评论','Comments')?> (<?=count($cList)?>)</h4>
      <div style="display:flex;gap:.15rem">
        <button onclick="loadComments(1,'newest')" class="sort-btn active" id="sortNewest2"><?=__('最新','New')?></button>
        <button onclick="loadComments(1,'hottest')" class="sort-btn" id="sortHottest2"><?=__('最热','Hot')?></button>
      </div>
    </div>
    <div id="cmsg"></div>
    <?php if($isAdminLoggedIn): $adminBadge=setting('admin_reply_badge','站长');$adminColor=setting('admin_reply_color','#bd9f67');?>
      <p style="font-size:.78rem;margin-bottom:.3rem"><span style="font-weight:600;color:<?=$adminColor?>"><?=safe($adminReplyName)?></span> <span style="font-size:.55rem;padding:.1rem .35rem;border-radius:3px;background:<?=$adminColor?>22;color:<?=$adminColor?>;border:1px solid <?=$adminColor?>33"><?=safe($adminBadge)?></span> · <span style="font-size:.65rem;color:var(--text3)"><?=__('管理员身份','Administrator')?></span></p>
    <?php elseif(!empty($_SESSION['user_id'])):$u=$db->prepare("SELECT username FROM users WHERE id=?");$u->execute([$_SESSION['user_id']]);$un=$u->fetchColumn();?>
      <p style="font-size:.72rem;margin-bottom:.3rem"><strong><?=safe($un??'')?></strong> · <a href="<?=$b?>/logout.php" style="color:var(--accent);font-size:.62rem"><?=__('退出','Logout')?></a></p>
    <?php else:?>
      <div style="display:flex;gap:.3rem;align-items:center;margin-bottom:.3rem">
        <input id="cn" placeholder="<?=__('昵称 *','Name *')?>" maxlength="30" style="flex:1;padding:.3rem .5rem;font-size:.78rem;background:var(--surface2);border:1px solid var(--border);border-radius:4px;color:var(--text)">
        <a href="<?=url_page('login')?>" style="font-size:.6rem;color:var(--accent);text-decoration:none;white-space:nowrap"><?=__('登录','Login')?></a>
        <span style="font-size:.5rem;color:var(--border)">|</span>
        <a href="<?=$b?>/register.php" style="font-size:.6rem;color:var(--text3);text-decoration:none;white-space:nowrap"><?=__('注册','Sign Up')?></a>
      </div>
      <p style="font-size:.55rem;color:var(--text3);margin:-0.1rem 0 .2rem;opacity:.7">💡 <?=__('无需注册，填写昵称即可评论','No registration needed, just enter a name')?></p>
    <?php endif;?>
    <?php if(!$loginRequired):?>
    <textarea id="cc" placeholder="<?=__('写下评论...','Write a comment...')?>" style="width:100%;padding:.3rem .5rem;font-size:.78rem;font-family:inherit;background:var(--surface2);border:1px solid var(--border);border-radius:4px;color:var(--text);min-height:45px;resize:vertical"></textarea>
    <button class="btn btn-accent btn-sm" style="width:100%;margin-top:.25rem" onclick="submitCmt()"><?=__('发表评论','Comment')?></button>
    <?php endif;?>
    <div id="clist" style="margin-top:.5rem"><div style="text-align:center;padding:1rem;color:var(--text3);font-size:.75rem"><span style="display:inline-block;width:14px;height:14px;border:2px solid var(--border);border-top-color:var(--accent);border-radius:50%;animation:spin .6s linear infinite;vertical-align:middle;margin-right:.3rem"></span><?=__('加载评论...','Loading comments...')?></div></div>
    <div id="cPagination" style="margin-top:.5rem"></div>
  </div>
  <?php endif; ?>

  <div class="post-main">
    <?php if(!$isTrainer): /* Blog mode: show full header */ ?>
    <a href="<?=$b?>/" style="font-size:.72rem;color:var(--text3);text-decoration:none;display:inline-block;margin-bottom:1rem"><?=__('← 返回首页','← Back')?></a>
    <h1 style="font-size:clamp(1.3rem,3vw,1.9rem);font-weight:700;margin-bottom:.5rem"><?=safe($displayTitle)?></h1>
    <div style="font-family:monospace;font-size:.7rem;color:var(--text3);margin-bottom:1.2rem;display:flex;gap:1rem;flex-wrap:wrap">
      <span>📅 <?=date('Y-m-d H:i',strtotime($post['created_at']))?></span>
      <span>📁 <?=safe(t($post['category']))?></span>
      <span>👁 <?=$post['view_count']?></span>
      <span>💬 <?=count($cList)?></span>
    </div>
    <?php if($post['cover_image']):?><img src="<?=safe($post['cover_image'])?>" alt="" style="width:100%;border-radius:8px;margin-bottom:1rem" loading="lazy"><?php endif;?>
    <?php endif; /* end !$isTrainer */ ?>

    <?php /* Locked content - TOP position */ ?>
    <?php if($hasLocked && $lockedPos==='top'):
      $lIcon=setting('lock_icon','🔐');$lTitle=setting('lock_title','')?:null;$lSub=setting('lock_sub','')?:null;$lBtn=setting('lock_btn','')?:null;$isUrl=filter_var($lIcon,FILTER_VALIDATE_URL);
    ?>
    <div id="lockedArea" style="margin-bottom:1rem">
      <div id="lockBox" class="lock-box"><div class="lock-border-anim"></div>
        <div class="lock-border"></div>
        <div class="lock-texture"></div>
        <div class="lock-gold-top"></div><div class="lock-gold-bot"></div>
        <div class="lock-content">
          <div class="lock-eyebrow"><span aria-hidden="true"></span><?=__('受保护的下载档案','Protected download archive')?></div>
          <div class="lock-emblem"><?php if($isUrl):?><img src="<?=safe($lIcon)?>" alt=""><?php else:?><span><?=safe($lIcon)?></span><?php endif;?></div>
          <div class="lock-text"><?=$lTitle?safe(t($lTitle)):__('下载链接等待解锁','Download link locked')?></div>
          <div class="lock-divider"><i></i></div>
          <div class="lock-sub"><?=$lSub?safe(t($lSub)):__('下载链接暂未显示，完成一次评论即可自动解锁。','The download link appears automatically after one comment.')?></div>
          <div class="lock-flow" aria-label="<?=__('下载链接解锁步骤','Steps to unlock the download link')?>">
            <div class="lock-step"><b>01</b><span><?=__('输入名字','Enter a name')?></span></div>
            <i aria-hidden="true">→</i>
            <div class="lock-step"><b>02</b><span><?=__('发表评论','Post a comment')?></span></div>
            <i aria-hidden="true">→</i>
            <div class="lock-step"><b>03</b><span><?=__('自动显示链接','Link appears')?></span></div>
          </div>
          <div class="lock-free-note"><strong><?=__('无需注册','No registration')?></strong><span><?=__('输入名字即可评论，提交后本页自动显示下载链接。','Just enter a name and comment. The download link will appear on this page automatically.')?></span></div>
          <a href="#commentsSection" class="lock-btn-royal" onclick="var cs=document.getElementById('commentsSection');if(cs){cs.scrollIntoView({behavior:'smooth',block:'center'});cs.classList.remove('comment-highlight');void cs.offsetWidth;cs.classList.add('comment-highlight');window.setTimeout(function(){var n=cs.querySelector('input[name=nickname],input[type=text]');if(n)n.focus()},520)}return false"><span><?=$lBtn?safe(t($lBtn)):__('前往评论并解锁','Comment to unlock')?></span><i aria-hidden="true">↗</i></a>
        </div>
        <div class="lock-bottom-text"><?=__('评论后自动解锁 · 无需账号','AUTO UNLOCK · NO ACCOUNT REQUIRED')?></div>
      </div>
      <div id="unlockedContent" style="display:none"></div>
    </div>
    <script>
    fetch(window.BASE_URL+'/api_locked.php?id='+window.POST_ID,{credentials:'same-origin'}).then(function(r){return r.json()}).then(function(r){if(r.ok&&r.html){document.getElementById('lockBox').style.display='none';var u=document.getElementById('unlockedContent');u.innerHTML='<div class="unlocked-wrap"><div class="unlocked-inner-border"></div><div class="unlocked-header"><span class="unlocked-badge">📜 <?=__('已解封','Unsealed')?></span></div><div class="post-content">'+r.html+'</div></div>';u.style.display='block'}}).catch(function(){});
    </script>
    <?php endif; ?>

    <?php /* Main article content */ ?>
    <div class="post-content"><?php
$contentToShow = $post['content'];
if ($isTrainer && $post['cover_image']) {
    $coverSrc = preg_quote(htmlspecialchars($post['cover_image'], ENT_QUOTES, 'UTF-8'), '/');
    $htmlContent = preg_replace('/<img[^>]*src=["\']' . $coverSrc . '["\'][^>]*\/?>/i', '', $htmlContent, 1);
}
if ($currentLang==='en' && $trans && $trans['content']) {
    echo $trans['content'];
} else {
    echo $htmlContent;
}
?></div>

    <?php /* Locked content - BOTTOM position */ ?>
    <?php if($hasLocked && $lockedPos==='bottom'):
      if(!isset($lIcon)){$lIcon=setting('lock_icon','🔐');$lTitle=setting('lock_title','')?:null;$lSub=setting('lock_sub','')?:null;$lBtn=setting('lock_btn','')?:null;}$isUrl=filter_var($lIcon,FILTER_VALIDATE_URL);
    ?>
    <div id="lockedArea" style="margin-top:1.2rem">
      <div id="lockBox" class="lock-box"><div class="lock-border-anim"></div>
        <div class="lock-border"></div>
        <div class="lock-texture"></div>
        <div class="lock-gold-top"></div><div class="lock-gold-bot"></div>
        <div class="lock-content">
          <div class="lock-eyebrow"><span aria-hidden="true"></span><?=__('受保护的下载档案','Protected download archive')?></div>
          <div class="lock-emblem"><?php if($isUrl):?><img src="<?=safe($lIcon)?>" alt=""><?php else:?><span><?=safe($lIcon)?></span><?php endif;?></div>
          <div class="lock-text"><?=$lTitle?safe(t($lTitle)):__('下载链接等待解锁','Download link locked')?></div>
          <div class="lock-divider"><i></i></div>
          <div class="lock-sub"><?=$lSub?safe(t($lSub)):__('下载链接暂未显示，完成一次评论即可自动解锁。','The download link appears automatically after one comment.')?></div>
          <div class="lock-flow" aria-label="<?=__('下载链接解锁步骤','Steps to unlock the download link')?>">
            <div class="lock-step"><b>01</b><span><?=__('输入名字','Enter a name')?></span></div>
            <i aria-hidden="true">→</i>
            <div class="lock-step"><b>02</b><span><?=__('发表评论','Post a comment')?></span></div>
            <i aria-hidden="true">→</i>
            <div class="lock-step"><b>03</b><span><?=__('自动显示链接','Link appears')?></span></div>
          </div>
          <div class="lock-free-note"><strong><?=__('无需注册','No registration')?></strong><span><?=__('输入名字即可评论，提交后本页自动显示下载链接。','Just enter a name and comment. The download link will appear on this page automatically.')?></span></div>
          <a href="#commentsSection" class="lock-btn-royal" onclick="var cs=document.getElementById('commentsSection');if(cs){cs.scrollIntoView({behavior:'smooth',block:'center'});cs.classList.remove('comment-highlight');void cs.offsetWidth;cs.classList.add('comment-highlight');window.setTimeout(function(){var n=cs.querySelector('input[name=nickname],input[type=text]');if(n)n.focus()},520)}return false"><span><?=$lBtn?safe(t($lBtn)):__('前往评论并解锁','Comment to unlock')?></span><i aria-hidden="true">↗</i></a>
        </div>
        <div class="lock-bottom-text"><?=__('评论后自动解锁 · 无需账号','AUTO UNLOCK · NO ACCOUNT REQUIRED')?></div>
      </div>
      <div id="unlockedContent" style="display:none"></div>
    </div>
    <script>
    fetch(window.BASE_URL+'/api_locked.php?id='+window.POST_ID,{credentials:'same-origin'}).then(function(r){return r.json()}).then(function(r){if(r.ok&&r.html){document.getElementById('lockBox').style.display='none';var u=document.getElementById('unlockedContent');u.innerHTML='<div class="unlocked-wrap"><div class="unlocked-inner-border"></div><div class="unlocked-header"><span class="unlocked-badge">📜 <?=__('已解封','Unsealed')?></span></div><div class="post-content">'+r.html+'</div></div>';u.style.display='block'}}).catch(function(){});
    </script>
    <?php endif;?>

    <?php if($commentsOn):?>
    <?php if($cmtPos!=="left"): ?><div id="commentsSection" style="margin-top:2rem">
      <div style="display:flex;justify-content:space-between;align-items:center;margin-bottom:.8rem">
        <h3 style="font-size:1rem">💬 <?=__('评论','Comments')?> (<?=count($cList)?>)</h3>
        <div style="display:flex;gap:.3rem" id="sortBtns">
          <button onclick="loadComments(1,'newest')" class="sort-btn active" id="sortNewest"><?=__('最新','New')?></button>
          <button onclick="loadComments(1,'hottest')" class="sort-btn" id="sortHottest"><?=__('最热','Hot')?></button>
        </div>
      </div>
      <div style="background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:1rem">
        <div id="cmsg"></div>
        <?php if(!empty($_SESSION['user_id'])):$u=$db->prepare("SELECT username FROM users WHERE id=?");$u->execute([$_SESSION['user_id']]);$un=$u->fetchColumn();?>
          <p style="font-size:.8rem;margin-bottom:.4rem"><strong><?=safe($un??'')?></strong> · <a href="<?=$b?>/logout.php" style="color:var(--accent);font-size:.7rem"><?=__('退出','Logout')?></a></p>
        <?php else:?>
          <div style="display:flex;gap:.4rem;margin-bottom:.2rem;align-items:center">
            <input id="cn" placeholder="<?=__('昵称 *','Name *')?>" maxlength="30" style="flex:1;padding:.45rem .6rem;font-size:.82rem;background:var(--surface2);border:1px solid var(--border);border-radius:4px;color:var(--text)">
            <input id="ce" type="email" placeholder="<?=__('邮箱 (选填)','Email (optional)')?>" style="flex:1;padding:.45rem .6rem;font-size:.82rem;background:var(--surface2);border:1px solid var(--border);border-radius:4px;color:var(--text)">
            <a href="<?=url_page('login')?>" style="font-size:.68rem;color:var(--accent);text-decoration:none;white-space:nowrap"><?=__('登录','Login')?></a>
            <span style="font-size:.55rem;color:var(--border)">|</span>
            <a href="<?=$b?>/register.php" style="font-size:.68rem;color:var(--text3);text-decoration:none;white-space:nowrap"><?=__('注册','Sign Up')?></a>
          </div>
          <p style="font-size:.62rem;color:var(--text3);margin-bottom:.3rem;opacity:.7">💡 <?=__('无需注册，填写昵称即可评论','No registration needed, just enter a name')?></p>
        <?php endif;?>
        <?php if(!$loginRequired):?>
        <textarea id="cc" placeholder="<?=__('写下你的评论...','Write a comment...')?>" style="width:100%;padding:.45rem .6rem;font-size:.82rem;font-family:inherit;background:var(--surface2);border:1px solid var(--border);border-radius:4px;color:var(--text);min-height:65px;resize:vertical"></textarea>
        <div style="display:flex;justify-content:flex-end;margin-top:.4rem">
          <button class="btn btn-accent btn-sm" onclick="submitCmt()"><?=__('发表评论','Comment')?></button>
        </div>
        <?php endif;?>
      </div>
      <div id="clist" style="margin-top:.6rem"><div style="text-align:center;padding:1rem;color:var(--text3);font-size:.75rem"><span style="display:inline-block;width:14px;height:14px;border:2px solid var(--border);border-top-color:var(--accent);border-radius:50%;animation:spin .6s linear infinite;vertical-align:middle;margin-right:.3rem"></span><?=__('加载评论...','Loading comments...')?></div></div>
      <div id="cPagination"></div>
    </div>
    
    <?php endif; /* cmtPos!==left */ ?>
    <?php endif; /* commentsOn */ ?>
<script>
    var currentSort = 'newest';
function loadComments(page, sort) {
  sort = sort || currentSort;
  currentSort = sort;
  ['sortNewest','sortNewest2','sortHottest','sortHottest2'].forEach(function(id){
    var el=document.getElementById(id); if(!el)return;
    var isActive=(id.indexOf('Newest')>-1&&sort==='newest')||(id.indexOf('Hottest')>-1&&sort==='hottest');
    el.className=isActive?'sort-btn active':'sort-btn';
  });
  
  fetch(window.BASE_URL+'/api_comments_list.php?post_id='+window.POST_ID+'&page='+page+'&sort='+sort)
    .then(function(r){return r.json()}).then(function(r){
      if(r.ok){
        document.getElementById('clist').innerHTML = r.html || '<p style="color:var(--text3);font-size:.78rem;padding:.5rem 0"><?=__('暂无评论','No comments')?></p>';
        var cp=document.getElementById('cPagination');if(cp)cp.innerHTML=r.pagination||'';
      }
    });
}
document.addEventListener('click', function(event){
  var button=event.target.closest('[data-comment-page]');
  if(!button)return;
  event.preventDefault();
  var page=parseInt(button.dataset.commentPage,10);
  if(page>0)loadComments(page,currentSort);
});
// Load comments on page load
loadComments(1, 'newest');

function translateComment(btn) {
  var item=btn.closest('.collection-comment');
  var textDiv=item&&item.querySelector('.collection-comment-content');
  if (!textDiv) return;
  var origText = textDiv.getAttribute('data-orig') || textDiv.textContent;
  textDiv.setAttribute('data-orig', origText);
  btn.textContent = '⏳';
  btn.disabled = true;
  fetch(window.BASE_URL+'/api_translate_comment.php', {
    method:'POST', headers:{'Content-Type':'application/x-www-form-urlencoded'},
    body:'text='+encodeURIComponent(origText), credentials:'same-origin'
  }).then(function(r){return r.json()}).then(function(r){
    if (r.ok) { textDiv.textContent = r.text; btn.textContent = '🌐'; btn.disabled = false; btn.title = '<?=__('剩余','Remaining')?>'+r.remaining+'<?=__('次','times')?>'; }
    else { btn.textContent = '❌'; btn.title = r.msg || 'Failed'; setTimeout(function(){btn.textContent='🌐';btn.disabled=false},2000); }
  }).catch(function(){ btn.textContent = '🌐'; btn.disabled = false; });
}
function likeComment(id,btn){
  fetch(window.BASE_URL+'/api_comment_like.php',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({id:id})})
    .then(function(r){return r.json()}).then(function(r){
      if(r.ok){btn.querySelector('span').textContent=r.likes;btn.style.color='var(--magenta)';btn.style.borderColor='var(--magenta)'}
      else if(r.msg)btn.style.color='var(--text3)'
    });
}
var replyParentId = 0;
function showReply(parentId, name) {
    replyParentId = parentId;
    var cc = document.getElementById('cc');
    cc.placeholder = '<?=__('回复','Reply')?> @' + name + '...';
    cc.focus();
    var hint = document.getElementById('replyHint');
    if (!hint) {
        hint = document.createElement('div');
        hint.id = 'replyHint';
        hint.style.cssText = 'font-size:.7rem;color:var(--accent);margin-bottom:.3rem;display:flex;align-items:center;gap:.3rem';
        cc.parentElement.insertBefore(hint, cc);
    }
    hint.innerHTML = '↩ 回复 <b>' + name + '</b> <a href="#" onclick="cancelReply();return false" style="color:var(--text3);font-size:.65rem">✕ <?=__('取消','Cancel')?></a>';
}
function cancelReply() {
    replyParentId = 0;
    var cc = document.getElementById('cc');
    cc.placeholder = '<?=__('写下评论...','Write a comment...')?>';
    var hint = document.getElementById('replyHint');
    if (hint) hint.remove();
}

function submitCmt(){var c=document.getElementById('cc').value.trim();if(!c){alert('<?=__('请输入评论','Please enter a comment')?>');return}var d={post_id:<?=$post['id']?>,content:c,parent_id:replyParentId};var n=document.getElementById('cn'),e=document.getElementById('ce');if(n){d.name=n.value.trim();if(!d.name){alert('<?=__('请输入昵称','Please enter a name')?>');return}}if(e)d.email=e.value.trim();var ca=document.getElementById('captchaInput');if(ca&&ca.value)d.captcha_answer=ca.value.trim();var m=document.getElementById('cmsg');m.innerHTML='<div style="background:var(--tag-bg);color:var(--accent);padding:.3rem .5rem;border-radius:4px;font-size:.78rem;margin-bottom:.4rem"><?=__('提交中...','Submitting...')?></div>';fetch(window.BASE_URL+'/api_comment.php',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify(d),credentials:'same-origin'}).then(function(r){return r.json()}).then(function(r){if(r.needCaptcha){m.innerHTML='<div style="background:rgba(243,156,18,.06);border:1px solid rgba(243,156,18,.15);padding:.5rem .7rem;border-radius:6px;margin-bottom:.4rem"><div style="font-size:.75rem;color:#f39c12;margin-bottom:.4rem">⚠ '+r.msg+'</div><div style="display:flex;gap:.3rem;align-items:center"><span style="font-size:.82rem;font-weight:600;color:var(--text);font-family:Orbitron,monospace;background:var(--surface2);padding:.3rem .6rem;border-radius:4px;border:1px solid var(--border)">'+r.captcha+'</span><input id="captchaInput" type="number" placeholder="<?=__('输入答案','Answer')?>" style="width:80px;padding:.3rem .5rem;font-size:.82rem;border:1px solid var(--border);border-radius:4px;background:var(--surface);color:var(--text);font-weight:600" onkeydown="if(event.key===\'Enter\')submitCmt()"><button class="btn btn-accent btn-sm" onclick="submitCmt()" style="font-size:.72rem"><?=__('验证','Verify')?></button></div></div>';return}if(r.ok){m.innerHTML='<div class="alert alert-ok" style="padding:.3rem .5rem;font-size:.78rem">'+r.msg+'</div>';document.getElementById('cc').value='';cancelReply();var cw=document.getElementById('captchaInput');if(cw)cw.parentElement.parentElement.remove();document.cookie='commented_<?=$post['id']?>=1;path=/;max-age=31536000';loadComments(1,'newest');<?php if($hasLocked):?>setTimeout(function(){fetch(window.BASE_URL+'/api_locked.php?id='+window.POST_ID,{credentials:'same-origin'}).then(function(r){return r.json()}).then(function(r){if(r.ok&&r.html){document.getElementById('lockBox').style.display='none';var u=document.getElementById('unlockedContent');u.innerHTML='<div class="unlocked-wrap"><div class="unlocked-inner-border"></div><div class="unlocked-header"><span class="unlocked-badge">📜 <?=__('已解封','Unsealed')?></span></div><div class="post-content">'+r.html+'</div></div>';u.style.display='block'}})},800);<?php endif;?>}else{m.innerHTML='<div class="alert alert-err" style="padding:.3rem .5rem;font-size:.78rem">'+(r.msg||'<?=__('失败','Failed')?>')+'</div>'}}).catch(function(){m.innerHTML='<div class="alert alert-err" style="padding:.3rem .5rem;font-size:.78rem"><?=__('网络错误','Network error')?></div>'});}
    </script>
  </div>

  <!-- Sidebar -->
  <?php
  // Load title translations for sidebar
  $sideTransMap=[];
  if($currentLang==='en'){try{$stm=$db->query("SELECT post_id,title FROM translations WHERE lang='en'");foreach($stm->fetchAll(PDO::FETCH_ASSOC) as $st)$sideTransMap[(int)$st['post_id']]=$st['title'];}catch(\Exception $e){}}
  ?>
  <aside class="post-sidebar">
    <div class="side-box"><h4><?=__('🔥 热门文章','🔥 Hot Posts')?></h4><?php foreach($hotPosts as $hp):
      $hCover=$hp['cover_image'];
      if(!$hCover&&preg_match('/<img[^>]+src=["\'](https?[^"\'>]+)/',$hp['content'],$_hm))$hCover=$_hm[1];
      $hpId=(int)($hp['id']??0);$hpTitle=($currentLang==='en'&&isset($sideTransMap[$hpId]))?$sideTransMap[$hpId]:$hp['title'];
    ?><a href="<?=url_post($hp['slug'])?>" style="display:flex;gap:.4rem;align-items:center;padding:.35rem 0">
      <?php if($hCover):?><img src="<?=safe($hCover)?>" style="width:36px;height:36px;border-radius:4px;object-fit:cover;flex-shrink:0"><?php endif;?>
      <div style="flex:1;min-width:0"><div style="overflow:hidden;text-overflow:ellipsis;white-space:nowrap"><?=safe($hpTitle)?></div><div style="font-size:.55rem;color:var(--text3)"><?=$hp['view_count']?>👁</div></div>
    </a><?php endforeach;?><?php if(empty($hotPosts)):?><span style="font-size:.75rem;color:var(--text3)"><?=__('暂无','None')?></span><?php endif;?></div>
    <div class="side-box"><h4><?=__('🎲 随机推荐','🎲 Random')?></h4><?php foreach($randPosts as $rp):?><a href="<?=url_post($rp['slug'])?>"><?=safe(t($rp['title']))?></a><?php endforeach;?></div>
    <div class="side-box"><h4><?=__('💬 最新评论','💬 Comments')?></h4><?php foreach($hotComments as $hc):?><a href="<?=url_post($hc['slug'])?>#clist" title="<?=safe($hc['ptitle'])?>"><?=safe($hc['name'])?>: <?=safe(mb_substr($hc['content'],0,20))?></a><?php endforeach;?><?php if(empty($hotComments)):?><span style="font-size:.75rem;color:var(--text3)"><?=__('暂无','None')?></span><?php endif;?></div>
  </aside>
</div>
</main>
<?php render_footer();?>
