<?php

// 防红域名
require_once('WxqqJump/WxqqJump.php');

require_once 'config.php';
ensureSchema();
$db = Database::getInstance();
$conn = $db->getConnection();

$settings = [];
$result = $conn->query("SELECT key_name, key_value FROM settings")->fetchAll();
foreach ($result as $row) $settings[$row['key_name']] = $row['key_value'];

function s($key, $default = '') {
    global $settings;
    return isset($settings[$key]) && $settings[$key] !== '' ? $settings[$key] : $default;
}
$bottomImage = s('bottom_image', '');
?>
<!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><?php echo safeInput(s('app_name', '应用激活系统')); ?></title>
<style>
*{margin:0;padding:0;box-sizing:border-box}

/* 页面背景 */
body{
    font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;
    background:linear-gradient(180deg,<?php echo safeInput(s('page_bg_top','#0a1628'));?> 0%,<?php echo safeInput(s('page_bg_mid','#152238'));?> 50%,<?php echo safeInput(s('page_bg_bot','#1a2a4a'));?> 100%);
    min-height:100vh;color:#fff;padding-bottom:20px;-webkit-tap-highlight-color:transparent;
}

/* 搜索栏 */
.search-bar{
    display:flex;align-items:center;margin:10px 15px;gap:8px;
    background:<?php echo safeInput(s('search_bg','rgba(255,255,255,0.08)'));?>;
    border:1px solid <?php echo safeInput(s('search_border','rgba(255,255,255,0.1)'));?>;
    border-radius:10px;padding:9px 14px;
}
.search-bar .bolt-icon{color:<?php echo safeInput(s('search_bolt','#4cff4c'));?>;font-size:18px;text-shadow:0 0 6px <?php echo safeInput(s('search_bolt','#4cff4c'));?>}
.search-bar input{flex:1;background:none;border:none;color:<?php echo safeInput(s('search_text','#ffffff'));?>;font-size:15px;outline:none}
.search-bar input::placeholder{color:<?php echo safeInput(s('search_placeholder','rgba(255,255,255,0.4)'));?>}
.search-bar .bar-icons{display:flex;gap:10px;color:rgba(255,255,255,.5);font-size:16px}

.main-content{padding:15px}

/* 特点说明框 */
.features-box{
    background:linear-gradient(135deg,<?php echo safeInput(s('feat_bg_1','#F5A623'));?> 0%,<?php echo safeInput(s('feat_bg_2','#F7C948'));?> 50%,<?php echo safeInput(s('feat_bg_3','#F5A623'));?> 100%);
    border-radius:16px;padding:20px 22px;margin-bottom:16px;
    box-shadow:0 4px 20px <?php echo safeInput(s('feat_bg_1','#F5A623'));?>44;
}
.features-title{font-size:18px;font-weight:700;color:<?php echo safeInput(s('feat_title','#fff'));?>;text-align:center;margin-bottom:16px;text-shadow:0 1px 3px rgba(0,0,0,.25);letter-spacing:1px}
.feature-list{list-style:none}
.feature-list li{display:flex;align-items:center;gap:10px;padding:7px 0;font-size:14px;color:<?php echo safeInput(s('feat_text','#fff'));?>;text-shadow:0 1px 1px rgba(0,0,0,.15);line-height:1.4}
.feature-list li .check-icon{width:20px;height:20px;background:<?php echo safeInput(s('feat_check_bg','#fff'));?>;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.feature-list li .check-icon::after{content:'✓';color:<?php echo safeInput(s('feat_check_color','#F5A623'));?>;font-weight:900;font-size:13px}
.feature-list li .highlight{color:<?php echo safeInput(s('feat_highlight','#4cff4c'));?>;font-weight:600}

/* 步骤按钮 */
.step-buttons{display:flex;flex-direction:column;gap:12px;margin-bottom:18px}
.step-btn{
    display:flex;align-items:center;justify-content:space-between;
    border:2px solid;border-radius:<?php echo intval(s('btn_radius',12));?>px;
    padding:15px 20px;font-size:16px;font-weight:600;
    cursor:pointer;text-decoration:none;
    transition:transform .15s,box-shadow .15s;-webkit-tap-highlight-color:transparent;
}
.step-btn:active{transform:scale(.97)}

#stepBtn1{background:<?php echo safeInput(s('btn1_bg','#D32F2F'));?>;border-color:<?php echo safeInput(s('btn1_border','#D32F2F'));?>;color:<?php echo safeInput(s('btn1_text','#fff'));?>;box-shadow:<?php echo safeInput(s('btn_shadow','0 3px 12px rgba(211,47,47,.3)'));?>}
#stepBtn1 .step-num{background:<?php echo safeInput(s('btn1_num_bg','rgba(255,255,255,.2)'));?>;color:<?php echo safeInput(s('btn1_num_text','#fff'));?>}
#stepBtn2{background:<?php echo safeInput(s('btn2_bg','#D32F2F'));?>;border-color:<?php echo safeInput(s('btn2_border','#D32F2F'));?>;color:<?php echo safeInput(s('btn2_text','#fff'));?>;box-shadow:<?php echo safeInput(s('btn_shadow','0 3px 12px rgba(211,47,47,.3)'));?>}
#stepBtn2 .step-num{background:<?php echo safeInput(s('btn2_num_bg','rgba(255,255,255,.2)'));?>;color:<?php echo safeInput(s('btn2_num_text','#fff'));?>}
#stepBtn3{background:<?php echo safeInput(s('btn3_bg','#D32F2F'));?>;border-color:<?php echo safeInput(s('btn3_border','#D32F2F'));?>;color:<?php echo safeInput(s('btn3_text','#fff'));?>;box-shadow:<?php echo safeInput(s('btn_shadow','0 3px 12px rgba(211,47,47,.3)'));?>}
#stepBtn3 .step-num{background:<?php echo safeInput(s('btn3_num_bg','rgba(255,255,255,.2)'));?>;color:<?php echo safeInput(s('btn3_num_text','#fff'));?>}

.step-btn .step-left{display:flex;align-items:center;gap:12px}
.step-btn .step-num{width:28px;height:28px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:14px;font-weight:700}
.step-btn .arrow{font-size:22px;color:<?php echo safeInput(s('btn1_arrow','#fff'));?>;opacity:.75}

/* 已授权标签 */
.authorized-badge{font-size:11px;background:<?php echo safeInput(s('badge_bg','#4caf50'));?>!important;color:<?php echo safeInput(s('badge_text','#fff'));?>!important;padding:2px 8px;border-radius:10px;margin-left:6px;font-weight:500;box-shadow:0 1px 4px <?php echo safeInput(s('badge_bg','#4caf50'));?>66}

/* 弹窗 */
.modal-overlay{display:none;position:fixed;top:0;left:0;width:100%;height:100%;background:<?php echo safeInput(s('modal_overlay','rgba(0,0,0,.7)'));?>;z-index:1000;justify-content:center;align-items:center}
.modal-overlay.active{display:flex}
.modal{background:<?php echo safeInput(s('modal_bg','#fff'));?>;border-radius:20px;padding:30px 25px;margin:20px;width:100%;max-width:340px;text-align:center;animation:modalIn .3s ease;box-shadow:0 10px 40px rgba(0,0,0,.3)}
@keyframes modalIn{from{transform:scale(.85);opacity:0}to{transform:scale(1);opacity:1}}
.modal-title{font-size:20px;font-weight:700;color:<?php echo safeInput(s('modal_title','#333'));?>;margin-bottom:20px}
.modal-input{width:100%;padding:14px 16px;border:2px solid <?php echo safeInput(s('modal_input_border','#4fc3f7'));?>;border-radius:10px;font-size:15px;outline:none;margin-bottom:20px;text-align:center;letter-spacing:1px;color:#333;transition:border-color .3s}
.modal-input:focus{border-color:<?php echo safeInput(s('modal_input_focus','#0288d1'));?>}
.modal-input::placeholder{color:#bbb}
.modal-buttons{display:flex;gap:12px}
.btn-verify{flex:1;padding:14px;border:none;border-radius:10px;background:linear-gradient(135deg,<?php echo safeInput(s('modal_verify_bg_1','#1976d2'));?> 0%,<?php echo safeInput(s('modal_verify_bg_2','#1565c0'));?> 100%);color:<?php echo safeInput(s('modal_verify_text','#fff'));?>;font-size:16px;font-weight:600;cursor:pointer;transition:transform .15s}
.btn-verify:active{transform:scale(.96)}
.btn-cancel{flex:1;padding:14px;border:none;border-radius:10px;background:<?php echo safeInput(s('modal_cancel_bg','#e0e0e0'));?>;color:<?php echo safeInput(s('modal_cancel_text','#333'));?>;font-size:16px;font-weight:600;cursor:pointer}

/* 底部横幅 */
.bottom-banner{margin:18px 15px 10px;border-radius:16px;overflow:hidden;position:relative;min-height:110px;background:linear-gradient(135deg,<?php echo safeInput(s('banner_bg_1','#1a0a2e'));?> 0%,<?php echo safeInput(s('banner_bg_2','#2d1057'));?> 50%,<?php echo safeInput(s('banner_bg_3','#1a0a2e'));?> 100%);display:flex;align-items:center;justify-content:center;box-shadow:0 4px 15px rgba(0,0,0,.3)}
.bottom-banner img{width:100%;height:auto;display:block}
.banner-placeholder{padding:25px;text-align:center;color:<?php echo safeInput(s('banner_desc_color','rgba(255,255,255,.6)'));?>;position:relative;width:100%}
.banner-placeholder .koi-left,.banner-placeholder .koi-right{font-size:36px;position:absolute;top:50%;transform:translateY(-50%);opacity:.7}
.banner-placeholder .koi-left{left:12px}
.banner-placeholder .koi-right{right:12px}
.banner-text{text-align:center;z-index:1}
.banner-text .main-title{font-size:30px;font-weight:900;color:<?php echo safeInput(s('banner_title_color','#ffd700'));?>;text-shadow:0 0 15px <?php echo safeInput(s('banner_title_color','#ffd700'));?>99,0 2px 4px rgba(0,0,0,.5);margin-bottom:6px;letter-spacing:2px}
.banner-text .sub-title{font-size:12px;color:<?php echo safeInput(s('banner_sub_color','rgba(255,255,255,.85)'));?>;margin-bottom:3px}
.banner-text .desc{font-size:11px;color:<?php echo safeInput(s('banner_desc_color','rgba(255,255,255,.6)'));?>}

/* Toast */
.toast{display:none;position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);background:rgba(0,0,0,.88);color:#fff;padding:16px 28px;border-radius:12px;font-size:15px;z-index:2000;text-align:center;max-width:80%}
.toast.success{border:2px solid #4caf50}
.toast.error{border:2px solid #f44336}

.loading{display:inline-block;width:18px;height:18px;border:3px solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:spin .8s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
</style>
</head>
<body>

<!-- 搜索栏 -->
<div class="search-bar">
    <span class="bolt-icon">⚡</span>
    <input type="text" placeholder="<?php echo safeInput(s('app_name','应用激活系统'));?>" readonly>
    <span class="bar-icons"><span>🔖</span><span>🔄</span></span>
</div>

<div class="main-content">
    <!-- 特点说明 -->
    <div class="features-box">
        <div class="features-title">应用特点与激活说明</div>
        <ul class="feature-list">
            <li><span class="check-icon"></span><?php echo safeInput(s('feature1','完美转发 超级防封 畅爽使用'));?></li>
            <li><span class="check-icon"></span><?php echo safeInput(s('feature2','一个激活码可在一个设备上一开'));?></li>
            <li><span class="check-icon"></span><?php echo safeInput(s('feature3','一个激活码不可在其他设备'));?></li>
            <li><span class="check-icon"></span><?php echo safeInput(s('feature4','一个激活码可以下载一该'));?></li>
            <li><span class="check-icon"></span><span class="highlight"><?php echo safeInput(s('feature5','一码一升,需要更多开请使用多个活码!'));?></span></li>
            <li><span class="check-icon"></span><?php echo safeInput(s('feature6','安装界面过期时间与用户无关,请放心使用!'));?></li>
        </ul>
    </div>

    <!-- 步骤按钮 -->
    <div class="step-buttons">
        <a href="#" class="step-btn" id="stepBtn1" onclick="handleStepClick(1,<?php echo jsValue(s('step1_url','#'));?>);return false;">
            <span class="step-left"><span class="step-num">1</span><span><?php echo safeInput(s('step1_title','安装TestFlight'));?></span></span>
            <span class="arrow">›</span>
        </a>
        <a href="#" class="step-btn" id="stepBtn2" onclick="handleStepClick(2,<?php echo jsValue(s('step2_url','#'));?>);return false;">
            <span class="step-left"><span class="step-num">2</span><span><?php echo safeInput(s('step2_title','使用TestFlight安装 皮卡丘'));?></span></span>
            <span class="arrow">›</span>
        </a>
        <a href="#" class="step-btn" id="stepBtn3" onclick="handleStepClick(3,<?php echo jsValue(s('step3_url','#'));?>);return false;">
            <span class="step-left"><span class="step-num">3</span><span><?php echo safeInput(s('step3_title','稳定防封！'));?></span></span>
            <span class="arrow">›</span>
        </a>
    </div>
</div>

<!-- 底部横幅 -->
<div class="bottom-banner">
<?php if(!empty($bottomImage)):?>
    <img src="<?php echo safeInput($bottomImage);?>" alt="底部图" onerror="this.style.display='none';document.getElementById('bannerFallback').style.display='block'">
    <div class="banner-placeholder" id="bannerFallback" style="display:none">
        <span class="koi-left">🐟</span>
        <div class="banner-text">
            <div class="main-title"><?php echo safeInput(s('banner_title','锦鲤TF'));?></div>
            <div class="sub-title"><?php echo safeInput(s('banner_subtitle','全天24小时稳定下载诚邀品鉴'));?></div>
            <div class="desc"><?php echo safeInput(s('banner_desc','一流团队独家打造安全稳定 独家'));?></div>
        </div>
        <span class="koi-right">🐟</span>
    </div>
<?php else:?>
    <div class="banner-placeholder" id="bannerFallback">
        <span class="koi-left">🐟</span>
        <div class="banner-text">
            <div class="main-title"><?php echo safeInput(s('banner_title','锦鲤TF'));?></div>
            <div class="sub-title"><?php echo safeInput(s('banner_subtitle','全天24小时稳定下载诚邀品鉴'));?></div>
            <div class="desc"><?php echo safeInput(s('banner_desc','一流团队独家打造安全稳定 独家'));?></div>
        </div>
        <span class="koi-right">🐟</span>
    </div>
<?php endif;?>
</div>

<!-- 激活码弹窗 -->
<div class="modal-overlay" id="activateModal">
    <div class="modal">
        <div class="modal-title">🔐 激活码兑换中心</div>
        <input type="text" class="modal-input" id="cardKeyInput" placeholder="请输入专属激活码" autocomplete="off">
        <div class="modal-buttons">
            <button class="btn-verify" id="btnVerify" onclick="verifyCard()">立即验证</button>
            <button class="btn-cancel" onclick="closeModal()">取消</button>
        </div>
    </div>
</div>

<div class="toast" id="toast"></div>

<script>
function openModal(){document.getElementById('activateModal').classList.add('active');setTimeout(function(){document.getElementById('cardKeyInput').focus()},100)}
function closeModal(){document.getElementById('activateModal').classList.remove('active');document.getElementById('cardKeyInput').value=''}

function getDeviceId(){
    var s=localStorage.getItem('deviceId');if(s)return s;
    var fp='';
    try{var c=document.createElement('canvas');var x=c.getContext('2d');x.textBaseline='top';x.font='14px Arial';x.fillText('fp',2,2);fp=c.toDataURL().substring(0,50)}catch(e){fp='nc'}
    try{var w=navigator;fp+=w.hardwareConcurrency||'';fp+=w.deviceMemory||''}catch(e){}
    var id=btoa(navigator.userAgent+fp+Date.now()).substring(0,32);
    localStorage.setItem('deviceId',id);return id;
}

// 判断是否已激活（检查localStorage + 24h过期时间）
function isActivated(){
    if(localStorage.getItem('activated')!=='1')return false;
    var exp=parseInt(localStorage.getItem('expire_ts')||'0');
    if(exp>0&&Date.now()>exp){
        // 已过期，清除
        localStorage.removeItem('activated');
        localStorage.removeItem('expire_ts');
        return false;
    }
    return true;
}

function setExpireAt(expireAtStr){
    // 后端返回 "YYYY-MM-DD HH:MM:SS"
    var ts=Date.parse(expireAtStr.replace(/-/g,'/'));
    if(!isNaN(ts))localStorage.setItem('expire_ts',String(ts));
}

function clearActivation(){
    localStorage.removeItem('activated');
    localStorage.removeItem('expire_ts');
    localStorage.removeItem('cardKey');
}

function handleStepClick(step,url){
    if(step===1){
        if(url&&url!=='#'&&url!=='')window.location.href=url;
        else showToast('暂无链接','error');
    }else if(step===2||step===3){
        if(isActivated()){
            if(url&&url!=='#'&&url!=='')window.location.href=url;
            else showToast('暂无链接','error');
            return;
        }
        window._pendingStep={step:step,url:url};openModal();
    }
}

function verifyCard(){
    var key=document.getElementById('cardKeyInput').value.trim();
    if(!key){showToast('请输入激活码','error');return}
    var btn=document.getElementById('btnVerify');
    btn.innerHTML='<span class="loading"></span> 验证中...';btn.disabled=true;

    var xhr=new XMLHttpRequest();
    xhr.open('POST','api.php',true);
    xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    xhr.onreadystatechange=function(){
        if(xhr.readyState===4){
            btn.innerHTML='立即验证';btn.disabled=false;
            try{
                var r=JSON.parse(xhr.responseText);
                if(r.code===200){
                    localStorage.setItem('activated','1');
                    localStorage.setItem('cardKey',key);
                    if(r.expire_at)setExpireAt(r.expire_at);
                    closeModal();
                    showToast(r.msg||'激活成功','success');
                    setTimeout(function(){location.reload()},1500);
                }else if(r.code===402){
                    // 过期 → 清除授权，重新弹窗
                    clearActivation();
                    showToast(r.msg||'已过期，请重新输入','error');
                    setTimeout(function(){location.reload()},2000);
                }else{
                    showToast(r.msg||'激活失败','error');
                }
            }catch(e){
                showToast('网络错误，请重试','error');
                console.error(xhr.responseText);
            }
        }
    };
    xhr.send('action=verify&code='+encodeURIComponent(key)+'&device_id='+encodeURIComponent(getDeviceId()));
}

function showToast(msg,type){
    var t=document.getElementById('toast');
    t.textContent=msg;t.className='toast '+(type||'');t.style.display='block';
    setTimeout(function(){t.style.display='none'},3000);
}

document.getElementById('cardKeyInput').addEventListener('keypress',function(e){if(e.key==='Enter')verifyCard()});
document.getElementById('activateModal').addEventListener('click',function(e){if(e.target===this)closeModal()});

// 页面加载时，向后端校验授权状态（封禁/过期）
window.addEventListener('DOMContentLoaded',function(){
    var did=getDeviceId();
    var fd=new FormData();
    fd.append('action','check_device');
    fd.append('device_id',did);
    fetch('api.php',{method:'POST',body:fd})
        .then(function(res){return res.json()})
        .then(function(r){
            if(r.code===200){
                // 后端确认有效 → 同步过期时间
                localStorage.setItem('activated','1');
                if(r.expire_at)setExpireAt(r.expire_at);
                markAuthorized();
            }else{
                // 401未激活 / 402过期 / 403封禁 → 清除前端授权
                clearActivation();
                if(r.code===403)showToast(r.msg||'授权已撤销','error');
                else if(r.code===402)showToast(r.msg||'激活已过期','error');
            }
        })
        .catch(function(){}); // 网络失败不处理，保持现状
});

function markAuthorized(){
    if(localStorage.getItem('activated')!=='1')return;
    var btns=document.querySelectorAll('.step-btn');
    if(btns.length>=3){
        var s='background:'+<?php echo jsValue(s("badge_bg","#4caf50"));?>+'!important;color:'+<?php echo jsValue(s("badge_text","#fff"));?>+'!important';
        if(!btns[1].querySelector('.authorized-badge'))btns[1].querySelector('.step-left').innerHTML+=' <span class="authorized-badge" style="'+s+'">✓已授权</span>';
        if(!btns[2].querySelector('.authorized-badge'))btns[2].querySelector('.step-left').innerHTML+=' <span class="authorized-badge" style="'+s+'">✓已授权</span>';
    }
}
</script>
</body>
</html>
