<?php
// 1. 初始化与配置
header("Content-Type: text/html; charset=utf-8");
error_reporting(E_ALL);

$baseUrl   = 'https://xxx.xaotu.xyz/';
$startPage = isset($_GET['p']) ? intval($_GET['p']) : 1;
$endPage   = $startPage + 2;

// 分类配置（导航菜单）
$cateMap = [
    'girls'      => '全部',
    'tagLanguageChinese' => '中文',
    'ethnicityAsian&xlive=ageTeen' => '英文',
    'tagLanguageKorean'  => '韩语',
    'tagLanguageJapanese'=> '日语',
];

// 当前激活的分类
$cate = isset($_GET['cate']) ? $_GET['cate'] : 'girls';
if (!isset($cateMap[$cate])) $cate = 'girls';

// 搜索功能
$wd = isset($_GET['wd']) ? trim($_GET['wd']) : '';

// 2. 抓取列表
$all = [];
for ($p = $startPage; $p <= $endPage; $p++) {
    // 根据分类构建 URL 参数
    if ($cate === 'girls') {
        // 全部分类：不传 lei 和 xlive
        $url = $baseUrl . '?girls=girls&p=' . $p;
    } else {
        // 其他分类：传 lei 和 xlive 参数
        $url = $baseUrl . '?girls=girls&lei=' . urlencode($cate) . '&xlive=' . urlencode($cate) . '&p=' . $p;
    }

    $ch = curl_init($url);
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_TIMEOUT => 30,
        CURLOPT_SSL_VERIFYPEER => false,
        CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
        CURLOPT_HTTPHEADER => ['User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.0']
    ]);

    $html = curl_exec($ch);
    curl_close($ch);

    if (!$html) continue;

    // 3. 解析 HTML
    libxml_use_internal_errors(true);
    $doc = new DOMDocument();
    @$doc->loadHTML($html);
    $xp = new DOMXPath($doc);

    $nodes = $xp->query('//div[@class="box"]');
    foreach ($nodes as $node) {
        $a = $xp->query('.//a[@class="item"]', $node)->item(0);
        if (!$a) continue;

        $href = $a->getAttribute('href');
        $titleNode = $xp->query('.//span[@class="description"]', $node)->item(0);
        $thumbNode = $xp->query('.//img[@class="img lazyload"]', $node)->item(0);
        $avatarNode = $xp->query('.//img[@class="video-thumbs"]', $node)->item(0);
        $durationNode = $xp->query('.//span[@class="duration"]', $node)->item(0);
        $viewsNode = $xp->query('.//span[@class="hd2"]', $node)->item(0);
        $liveNode = $xp->query('.//span[@class="hd3"]', $node)->item(0);

        $thumb = $thumbNode ? ($thumbNode->getAttribute('data-src') ?: $thumbNode->getAttribute('src')) : '';

        $playId = '';
        if (preg_match('/[?&]id=(\d+)/', $href, $m)) {
            $playId = $m[1];
        }
        $playUrl = $playId ? 'https://xxx.xaotu.xyz/live/liveplay.php?id=' . $playId : '';

        $title = $titleNode ? trim($titleNode->textContent) : '';

        // 搜索过滤
        if ($wd && stripos($title, $wd) === false) {
            continue;
        }

        $all[] = [
            'title'    => $title,
            'url'      => $href ? $baseUrl . ltrim($href, '/') : '',
            'playUrl'  => $playUrl,
            'thumb'    => $thumb,
            'avatar'   => $avatarNode ? $avatarNode->getAttribute('src') : '',
            'duration' => $durationNode ? trim($durationNode->textContent) : '',
            'views'    => $viewsNode ? trim($viewsNode->textContent) : '',
            'live_tag' => $liveNode ? trim($liveNode->textContent) : '',
        ];
    }
    libxml_clear_errors();
    sleep(1);
}

// 4. 构建导航 HTML
$navHtml = '';
foreach ($cateMap as $key => $name) {
    $active = ($key === $cate) ? 'active' : '';
    $navHtml .= '<a href="?cate='.$key.'&p=1" class="nav-item '.$active.'">'.$name.'</a>';
}

// 5. 构建卡片列表 HTML
$xml = '';
if (!empty($all)) {
    foreach ($all as $item) {
        $title = htmlspecialchars($item['title'] ?: '精彩视频');
        $cover = htmlspecialchars($item['thumb']);
        $playUrl = htmlspecialchars($item['playUrl']);
        $badge = $item['live_tag'] ? htmlspecialchars($item['live_tag']) : '';
        $meta = [];
        if ($item['duration']) $meta[] = htmlspecialchars($item['duration']);
        if ($item['views'])    $meta[] = htmlspecialchars($item['views']);
        $metaStr = implode(' · ', $meta);

        $xml .= <<<HTML
        <div class="vod-card" onclick="openPlayer('{$playUrl}','{$title}')">
            <div class="vod-pic-box">
                <img class="vod-pic" src="{$cover}" alt="{$title}" loading="lazy" referrerpolicy="no-referrer">
                <?php if ($badge): ?>
                <span class="vod-badge">{$badge}</span>
                <?php endif; ?>
            </div>
            <div class="vod-info">
                <h3 class="vod-title">{$title}</h3>
                <div class="vod-meta">{$metaStr}</div>
            </div>
        </div>
HTML;
    }
} else {
    $xml = '<div class="empty-tip">暂无数据，请检查网络或目标网站状态</div>';
}

// 6. 分页 HTML
$pageHtml = '<div class="page-box">';
if ($startPage > 1) {
    $prevP = max(1, $startPage - 3);
    $pageHtml .= '<a href="?p=' . $prevP . '" class="page-btn">上一批</a>';
}
if (count($all) > 0) {
    $nextP = $endPage + 1;
    $pageHtml .= '<a href="?p=' . $nextP . '" class="page-btn">下一批</a>';
}
$pageHtml .= '<span class="page-text">第 ' . $startPage . '~' . $endPage . ' 页 · 共 ' . count($all) . ' 条</span></div>';
?>

<!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>
*{margin:0;padding:0;box-sizing:border-box;font-family:system-ui,Microsoft Yahei,sans-serif;}
::-webkit-scrollbar{width:6px;height:6px;}
::-webkit-scrollbar-track{background:#12141a;}
::-webkit-scrollbar-thumb{background:#444;border-radius:3px;}
body{background:#12141a;color:#eee;padding-top:70px;}
.header{
    position:fixed;
    top:0;
    left:0;
    width:100%;
    height:70px;
    background:linear-gradient(135deg,#0c0e14,#1a1d27);
    border-bottom:1px solid #282c38;
    z-index:9999;
    display:flex;
    align-items:center;
    justify-content:space-between;
    padding:0 40px;
    flex-wrap:wrap;
}
.logo{display:flex;align-items:center;gap:10px;color:#ffc145;font-size:24px;font-weight:bold;text-decoration:none;}
.logo-icon{font-size:28px;}
.nav-menu{display:flex;gap:24px;flex-wrap:wrap;align-items:center;}
.nav-item{color:#c9cdd8;text-decoration:none;font-size:15px;padding:8px 12px;border-radius:6px;transition:.25s;}
.nav-item:hover,.nav-item.active{background:#ffc14522;color:#ffc145;}
.tool-group{display:flex;gap:12px;flex-wrap:wrap;min-width:80px;align-items:center;}
.tool-btn{padding:8px 16px;border-radius:8px;border:1px solid #ffc145;color:#ffc145;background:transparent;cursor:pointer;transition:.25s;font-size:14px;text-decoration:none;display:inline-flex;align-items:center;}
.tool-btn:hover{background:#ffc145;color:#12141a;}
.container{max-width:1480px;margin:0 auto;padding:30px 20px;display:block;}
.block{background:#1a1d27;border-radius:14px;padding:20px;border:1px solid #282c38;}
.block-title{font-size:18px;color:#ffc145;margin-bottom:16px;padding-bottom:10px;border-bottom:1px solid #282c38;display:flex;align-items:center;gap:8px;}
.block-title::before{content:"▶";}
.vod-wrap{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:20px;}
.vod-card{background:#1a1d27;border-radius:12px;overflow:hidden;border:1px solid #282c38;transition:.3s;cursor:pointer;position:relative;}
.vod-card:hover{transform:translateY(-6px);border-color:#ffc14566;box-shadow:0 8px 24px #0004;}
.vod-pic-box{width:100%;height:340px;overflow:hidden;position:relative;}
.vod-pic{width:100%;height:100%;object-fit:cover;transition:.4s;}
.vod-card:hover .vod-pic{transform:scale(1.06);}
.vod-badge{position:absolute;top:10px;right:10px;padding:4px 10px;background:#ff5722;color:#fff;border-radius:6px;font-size:12px;font-weight:bold;z-index:2;}
.vod-info{padding:14px;}
.vod-title{font-size:16px;color:#fff;margin-bottom:6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.vod-meta{font-size:13px;color:#888;}
.empty-tip{text-align:center;padding:80px 0;color:#888;font-size:16px;}
.page-box{display:flex;align-items:center;justify-content:center;gap:14px;margin-top:40px;padding:20px 0;}
.page-btn{padding:10px 22px;border-radius:10px;border:1px solid #ffc145;color:#ffc145;text-decoration:none;transition:.25s;font-size:14px;}
.page-btn:hover{background:#ffc145;color:#12141a;}
.page-text{color:#aaa;}
.footer{text-align:center;padding:40px 0;color:#666;border-top:1px solid #282c38;margin-top:30px;}

/* 播放器弹窗 */
.player-modal{
    display:none;
    position:fixed;
    top:0;
    left:0;
    width:100vw;
    height:100vh;
    background:rgba(0,0,0,.94);
    z-index:99999;
    padding:20px;
}
.player-modal.show{
    display:flex;
    align-items:center;
    justify-content:center;
}
.player-wrap{
    width:90%;
    max-width:1200px;
    display:flex;
    flex-direction:column;
    gap:16px;
}
.player-top{
    display:flex;
    align-items:center;
    flex-wrap:wrap;
    gap:16px;
    position:relative;
}
.close-btn{
    position:absolute;
    right:0;
    top:0;
    background:#ff4757 !important;
    color:#fff !important;
    padding:8px 16px;
    border-radius:8px;
    border:none;
    font-weight:bold;
    cursor:pointer;
}
.play-title{color:#ffc145;font-size:16px;font-weight:bold;flex:1;min-width:200px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.player-container{
    width:100%;
    height:640px;
    border-radius:12px;
    overflow:hidden;
    border:1px solid #ffc14533;
    background:#000;
}
.player-container iframe{
    width:100%;
    height:100%;
    background:#000;
    border:0;
}
@media (max-width:992px){
    .header{padding:0 16px;height:auto;flex-direction:column;gap:12px;padding:14px;}
    body{padding-top:120px;}
    .vod-wrap{grid-template-columns:repeat(auto-fill,minmax(170px,1fr));}
    .vod-pic-box{height:260px;}
    .player-container{height:400px;}
}
</style>
</head>
<body>

<header class="header">
    <a href="?p=1" class="logo">
        <span class="logo-icon">📺</span>直播列表
    </a>
    <nav class="nav-menu">
        <?=$navHtml?>
    </nav>
    <div class="tool-group">
        <form method="get" action="" style="display:flex;gap:8px;">
            <input type="text" name="wd" value="<?=htmlspecialchars($wd)?>" placeholder="搜索主播..." style="padding:6px 12px;border-radius:6px;border:1px solid #ffc145;background:#1a1d27;color:#fff;outline:none;width:160px;font-size:14px;">
            <button type="submit" class="tool-btn">搜索</button>
        </form>
        <a href="?p=1" class="tool-btn">首页</a>
    </div>
</header>

<div class="container">
    <div class="block">
        <div class="block-title">精选推荐</div>
        <div class="vod-wrap">
            <?=$xml?>
        </div>
        <?=$pageHtml?>
    </div>
</div>

<div class="footer">
直播列表 ©2026 高清在线
</div>

<!-- 播放器弹窗 -->
<div class="player-modal" id="modal">
    <div class="player-wrap">
        <div class="player-top">
            <span class="play-title" id="playTitle"></span>
            <button class="close-btn" onclick="closePlayer()">关闭</button>
        </div>
        <div class="player-container" id="wrapBox">
            <iframe id="playFrame" allowfullscreen></iframe>
        </div>
    </div>
</div>

<script>
const modal = document.getElementById('modal');
const playFrame = document.getElementById('playFrame');
const playTitle = document.getElementById('playTitle');

function openPlayer(url, title) {
    if (!url) {
        alert('该视频暂无播放地址');
        return;
    }
    playTitle.textContent = title;
    playFrame.src = url;
    modal.classList.add('show');
}

function closePlayer() {
    modal.classList.remove('show');
    playFrame.src = '';
    playTitle.textContent = '';
    if (document.exitFullscreen) document.exitFullscreen();
}

// ESC 关闭
document.addEventListener('keydown', function(e) {
    if (e.key === 'Escape') closePlayer();
});

// 点击遮罩关闭
modal.addEventListener('click', function(e) {
    if (e.target === modal) closePlayer();
});
</script>

</body>
</html>
