import { api } from "../api.js";
import { emptyState, mediaCard } from "../components.js";
import {
escapeAttr, escapeHtml, formatCount, formatDelta,
formatPercent, formatScore,
} from "../format.js";
import { canAccessProtected } from "../session.js";
function statChip(label, value, { href = null, tone = "" } = {}) {
const inner = `${escapeHtml(label)}${value}`;
if (href) {
return `${inner}`;
}
return `
${items.map((item, index) => mediaCard(item, {
rank: index + 1,
highlight: `热度 ${formatScore(item.heat)} · 前 ${Math.max(0, 100 - (item.heat_percentile || 0)).toFixed(0)}%`,
})).join("")}
`;
}
function publishedCard(item) {
return mediaCard(item, {
highlight: `${formatCount(item.metrics?.view)} 播放 · 互动 ${formatPercent(item.interaction_rate)}`,
});
}
function growthCard(item, index) {
const delta = item.growth?.delta;
let highlight = `${formatCount(item.metrics?.view)} 播放`;
if (delta !== null && delta !== undefined) {
const tone = Number(delta) >= 0 ? "up" : "down";
highlight += `
最新动态
收录视频 ${formatCount(activeCount)}
${statChip(firstDay ? "首次导入" : "今日入库", escapeHtml(addedLabel), {
href: "/videos?sort=added&within_days=7", tone: "accent",
})}
${statChip("播放增量", overview.view_delta_available ? formatDelta(overview.view_delta) : "—", {
href: "/videos?sort=growth&growth_days=1",
})}
${statChip("7 日粉丝变化", fans?.delta_7d === null || fans?.delta_7d === undefined ? "—" : formatDelta(fans.delta_7d), {
href: "/fans",
})}
${statChip("数据日期", escapeHtml(overview.data_date || "—"))}
${showCandidates ? `
${formatCount(pending)} 条候选待确认
请在 Telegram 中处理 →
` : ""}
按视频发布时间排序,与入库时间无关。
${published.items.length ? published.items.map((item) => publishedCard(item)).join("")
: emptyState("最近 14 天没有新发布视频", "搜索发现的新视频会逐步补充。")}
增长动态 · ${escapeHtml(growthLabel)}
增长榜
${growth.available && growth.items.length
? `${growth.items.map((item, index) => growthCard(item, index)).join("")}
`
: emptyState(growthEmptyTitle, growthEmptyHint)}
`;
root.querySelector("#refresh-home")?.addEventListener("click", () => window.location.reload());
}