<?php
/** 本源码版权所有©葫芦侠用户天奕科技工作室，侵权联系邮箱tianhkeji@qq.com删除处理 */
/**
 * 苹果CMS资源采集管理页面
 * 采集短剧(t=46) + AI漫剧(t=52)
 */
session_start();
if (!isset($_SESSION['admin_login']) || !$_SESSION['admin_login']) {
    header("Location: index.php");
    exit;
}
require __DIR__ . '/../config.php';
require __DIR__ . '/fetch_maccms.php';

$result = null;
$action = $_GET['action'] ?? '';

// 执行采集
if ($action === 'all' || $action === 'drama' || $action === 'comic') {
    @set_time_limit(600);
    @ini_set('memory_limit', '512M');

    $pages = intval($_GET['pages'] ?? 3);
    if ($pages < 1) $pages = 3;
    if ($pages > 200) $pages = 200;
    $onlyNew = !isset($_GET['update']) || $_GET['update'] != '1';

    if ($action === 'all') {
        $result = macFetchAll($pages, $onlyNew);
        $result['_type'] = '全部分类采集（短剧+AI漫剧）';
    } elseif ($action === 'drama') {
        $r = macFetchCategory(46, $pages, $onlyNew);
        $result = ['categories' => [$r], 'total_added' => $r['added'], 'total_updated' => $r['updated'], 'total_skipped' => $r['skipped'], 'errors' => $r['errors'], '_type' => '短剧分类采集'];
    } else {
        $r = macFetchCategory(52, $pages, $onlyNew);
        $result = ['categories' => [$r], 'total_added' => $r['added'], 'total_updated' => $r['updated'], 'total_skipped' => $r['skipped'], 'errors' => $r['errors'], '_type' => 'AI漫剧分类采集'];
    }
}

// 统计数据
$totalDrama = mysqli_fetch_assoc(mysqli_query($conn, "SELECT count(*) cnt FROM drama_list"))['cnt'];
$totalShort = mysqli_fetch_assoc(mysqli_query($conn, "SELECT count(*) cnt FROM drama_list WHERE category='短剧'"))['cnt'];
$totalComic = mysqli_fetch_assoc(mysqli_query($conn, "SELECT count(*) cnt FROM drama_list WHERE category='AI漫剧'"))['cnt'];
$withLink = mysqli_fetch_assoc(mysqli_query($conn, "SELECT count(*) cnt FROM drama_list WHERE resource_link != ''"))['cnt'];
$todayNew = mysqli_fetch_assoc(mysqli_query($conn, "SELECT count(*) cnt FROM drama_list WHERE update_day=CURDATE()"))['cnt'];

// API连通性测试
$apiOk = false;
$apiMsg = '未测试';
$testData = macApiGet(['ac' => 'videolist', 't' => 46, 'pg' => 1]);
if ($testData && isset($testData['total'])) {
    $apiOk = true;
    $apiMsg = "连接正常，短剧共 {$testData['total']} 条";
} else {
    $apiMsg = '无法连接采集API';
}
?>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=5.0">
<title>资源采集 - 后台管理</title>
<link rel="stylesheet" href="../static/style.css">
<style>
    .fetch-hero {
        background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
        border-radius: var(--radius);
        padding: 24px;
        color: white;
        margin-bottom: 20px;
    }
    .fetch-hero h2 { font-size: 20px; font-weight: 700; margin-bottom: 6px; }
    .fetch-hero p { opacity: 0.9; font-size: 13px; }

    .status-grid {
        display: grid;
        grid-template-columns: repeat(5, 1fr);
        gap: 12px;
        margin-bottom: 20px;
    }
    .status-card {
        background: white;
        border-radius: var(--radius);
        box-shadow: var(--shadow);
        padding: 16px;
        text-align: center;
    }
    .status-card .num { font-size: 26px; font-weight: 800; }
    .status-card .label { font-size: 12px; color: var(--text-light); margin-top: 4px; }
    .status-card.blue .num { color: #2563eb; }
    .status-card.green .num { color: #059669; }
    .status-card.purple .num { color: #7c3aed; }
    .status-card.orange .num { color: #ea580c; }
    .status-card.cyan .num { color: #0891b2; }

    .action-grid {
        display: grid;
        grid-template-columns: repeat(3, 1fr);
        gap: 16px;
        margin-bottom: 20px;
    }
    .action-card {
        background: white;
        border-radius: var(--radius);
        box-shadow: var(--shadow);
        padding: 24px 20px;
        text-align: center;
    }
    .action-card .icon { font-size: 36px; margin-bottom: 12px; }
    .action-card h3 { font-size: 16px; font-weight: 700; margin-bottom: 6px; }
    .action-card p { font-size: 12px; color: var(--text-light); margin-bottom: 16px; line-height: 1.6; }
    .action-card .btn { width: 100%; margin-bottom: 8px; }

    .result-box {
        background: white;
        border-radius: var(--radius);
        box-shadow: var(--shadow);
        padding: 24px;
        margin-bottom: 20px;
    }
    .result-box h3 { font-size: 16px; font-weight: 700; margin-bottom: 16px; }
    .cat-result {
        background: #f8fafc;
        border-radius: 8px;
        padding: 16px;
        margin-bottom: 12px;
    }
    .cat-result h4 { font-size: 14px; font-weight: 700; margin-bottom: 10px; }
    .cat-stats {
        display: grid;
        grid-template-columns: repeat(4, 1fr);
        gap: 8px;
    }
    .cat-stat {
        text-align: center;
        padding: 8px;
        background: white;
        border-radius: 6px;
    }
    .cat-stat .n { font-size: 20px; font-weight: 800; }
    .cat-stat .l { font-size: 11px; color: var(--text-light); }
    .cat-stat.add .n { color: #059669; }
    .cat-stat.upd .n { color: #2563eb; }
    .cat-stat.skip .n { color: #ea580c; }
    .cat-stat.tot .n { color: #64748b; }

    .api-status {
        display: flex;
        align-items: center;
        gap: 8px;
        padding: 12px 16px;
        border-radius: 8px;
        font-size: 13px;
        margin-bottom: 20px;
    }
    .api-status.ok { background: #d1fae5; color: #065f46; }
    .api-status.error { background: #fee2e2; color: #991b1b; }
    .api-status .dot { width: 8px; height: 8px; border-radius: 50%; }
    .api-status.ok .dot { background: #10b981; }
    .api-status.error .dot { background: #ef4444; }

    .options-bar {
        display: flex;
        gap: 12px;
        align-items: center;
        flex-wrap: wrap;
        margin-bottom: 16px;
        padding: 12px 16px;
        background: #f8fafc;
        border-radius: 8px;
        font-size: 13px;
    }
    .options-bar select, .options-bar label {
        padding: 6px 10px;
        border: 1px solid var(--border);
        border-radius: 6px;
        font-size: 13px;
    }
    .options-bar label { display: flex; align-items: center; gap: 4px; border: none; }

    .cron-guide {
        background: #f0f9ff;
        border: 1px solid #bae6fd;
        border-radius: var(--radius-sm);
        padding: 16px;
        font-size: 13px;
        color: #0c4a6e;
        line-height: 1.8;
    }
    .cron-guide code {
        background: white;
        padding: 2px 8px;
        border-radius: 4px;
        font-family: 'Courier New', monospace;
        font-size: 12px;
    }

    .error-list {
        background: #fef2f2;
        border: 1px solid #fecaca;
        border-radius: 8px;
        padding: 12px 16px;
        max-height: 200px;
        overflow-y: auto;
    }
    .error-list .err-item {
        font-size: 12px;
        color: #991b1b;
        padding: 4px 0;
        border-bottom: 1px solid #fecaca;
    }

    @media (max-width: 768px) {
        .status-grid { grid-template-columns: repeat(2, 1fr); }
        .action-grid { grid-template-columns: 1fr; }
        .cat-stats { grid-template-columns: repeat(2, 1fr); }
    }
</style>
</head>
<body>

<nav class="navbar">
    <div class="navbar-brand">🎬 资源采集管理</div>
    <div class="navbar-links">
        <a href="main.php">后台首页</a>
        <a href="drama_list.php">短剧列表</a>
        <a href="logout.php" style="color:var(--danger);">退出</a>
    </div>
</nav>

<div class="container">

    <div class="fetch-hero animate-fade-in">
        <h2>🎬 苹果CMS资源自动采集</h2>
        <p>数据源：cj.lziapi.com (lzm3u8) | 只采集【短剧】和【AI漫剧】两个分类，自动去重入库，支持全部剧集</p>
    </div>

    <div class="api-status <?php echo $apiOk ? 'ok' : 'error'; ?> animate-fade-in">
        <span class="dot"></span>
        <span>API状态：<?php echo $apiMsg; ?></span>
    </div>

    <div class="status-grid animate-fade-in">
        <div class="status-card blue">
            <div class="num"><?php echo $totalDrama; ?></div>
            <div class="label">资源总数</div>
        </div>
        <div class="status-card green">
            <div class="num"><?php echo $totalShort; ?></div>
            <div class="label">短剧</div>
        </div>
        <div class="status-card purple">
            <div class="num"><?php echo $totalComic; ?></div>
            <div class="label">AI漫剧</div>
        </div>
        <div class="status-card orange">
            <div class="num"><?php echo $withLink; ?></div>
            <div class="label">有播放地址</div>
        </div>
        <div class="status-card cyan">
            <div class="num"><?php echo $todayNew; ?></div>
            <div class="label">今日新增</div>
        </div>
    </div>

    <!-- 采集选项 -->
    <div class="options-bar animate-fade-in">
        <strong>采集页数：</strong>
        <select id="pageSel">
            <option value="1">1页(约20条)</option>
            <option value="3" selected>3页(约60条)</option>
            <option value="5">5页(约100条)</option>
            <option value="10">10页(约200条)</option>
            <option value="20">20页(约400条)</option>
            <option value="50">50页(约1000条)</option>
            <option value="0">全部(耗时较长)</option>
        </select>
        <label><input type="checkbox" id="updateChk"> 更新已存在的资源</label>
        <span style="color:var(--text-light);font-size:12px;">（不勾选则只采集新剧，已存在的跳过）</span>
    </div>

    <!-- 采集结果 -->
    <?php if ($result): ?>
    <div class="result-box animate-fade-in">
        <h3>📊 <?php echo $result['_type']; ?> - 采集结果</h3>
        <?php foreach ($result['categories'] as $cat): ?>
        <div class="cat-result">
            <h4>📁 <?php echo $cat['category']; ?>（共<?php echo $cat['total']; ?>条，采集<?php echo $cat['page_count']; ?>页）</h4>
            <div class="cat-stats">
                <div class="cat-stat add"><div class="n"><?php echo $cat['added']; ?></div><div class="l">新增入库</div></div>
                <div class="cat-stat upd"><div class="n"><?php echo $cat['updated']; ?></div><div class="l">更新</div></div>
                <div class="cat-stat skip"><div class="n"><?php echo $cat['skipped']; ?></div><div class="l">跳过</div></div>
                <div class="cat-stat tot"><div class="n"><?php echo $cat['total']; ?></div><div class="l">源站总数</div></div>
            </div>
        </div>
        <?php endforeach; ?>
        <?php if (!empty($result['errors'])): ?>
        <div class="error-list" style="margin-top:12px;">
            <strong style="font-size:13px;">⚠️ 错误（<?php echo count($result['errors']); ?>条）：</strong>
            <?php foreach (array_slice($result['errors'], 0, 20) as $err): ?>
            <div class="err-item"><?php echo htmlspecialchars($err); ?></div>
            <?php endforeach; ?>
        </div>
        <?php else: ?>
        <div style="background:#d1fae5;color:#065f46;padding:10px 16px;border-radius:8px;font-size:13px;margin-top:12px;">
            ✅ 采集完成，无错误
        </div>
        <?php endif; ?>
    </div>
    <?php endif; ?>

    <!-- 采集操作 -->
    <div class="action-grid animate-fade-in">
        <div class="action-card">
            <div class="icon">🚀</div>
            <h3>一键全部采集</h3>
            <p>同时采集短剧和AI漫剧两个分类，自动去重，推荐首次使用</p>
            <button class="btn btn-primary" onclick="goFetch('all')">🚀 开始采集</button>
        </div>
        <div class="action-card">
            <div class="icon">🎬</div>
            <h3>仅采集短剧</h3>
            <p>只采集短剧分类（t=46），含m3u8播放地址，可在线播放</p>
            <button class="btn btn-primary" onclick="goFetch('drama')">🎬 采集短剧</button>
        </div>
        <div class="action-card">
            <div class="icon">🎨</div>
            <h3>仅采集AI漫剧</h3>
            <p>只采集AI漫剧分类（t=52），含封面图和播放地址</p>
            <button class="btn btn-primary" onclick="goFetch('comic')">🎨 采集AI漫剧</button>
        </div>
    </div>

    <!-- 宝塔定时任务说明 -->
    <div class="cron-guide animate-fade-in">
        <strong>⏰ 宝塔计划任务自动采集</strong><br>
        宝塔面板 → 计划任务 → 添加任务 → 任务类型选【访问URL】→ 执行周期选【每天】→ 时间设为凌晨1点 → URL填：<br>
        <code>https://你的域名/cron_maccms.php?key=duanjuso2026&pages=3</code><br>
        <span style="font-size:12px;">pages=3 表示每次采集3页（约60条），可自行调整。密钥在 cron_maccms.php 中修改。</span>
    </div>

</div>

<script>
function goFetch(type) {
    var pages = document.getElementById('pageSel').value;
    var update = document.getElementById('updateChk').checked ? '&update=1' : '';
    var tip = pages == 0 ? '采集全部数据可能需要较长时间，确定继续？' : '确定开始采集？';
    if (confirm(tip)) {
        location.href = '?action=' + type + '&pages=' + pages + update;
    }
}
</script>
</body>
</html>
