import type { VersionWithContext } from './derive'; import { WORK_HOURS } from './work-hours'; const UNFINISHED_VERSION_STATUSES = new Set(['planned', 'developing', 'paused']); export interface XiaobaoWarningVersionFilter { canManage: boolean; userName?: string; } export function filterXiaobaoWarningVersions( versions: VersionWithContext[], filter: XiaobaoWarningVersionFilter, ): VersionWithContext[] { return versions.filter((version) => { if (!UNFINISHED_VERSION_STATUSES.has(version.status)) return false; if (filter.canManage) return true; if (!filter.userName) return false; return (version.members ?? []).some((member) => member.name === filter.userName); }); } export function formatRemainingWork(hours: number): string { const safeHours = Number.isFinite(hours) && hours > 0 ? hours : 0; const days = safeHours / WORK_HOURS.hoursPerDay; return `${formatNumber(safeHours)}h / ${formatNumber(days)}天`; } function formatNumber(value: number): string { if (Number.isInteger(value)) return String(value); return value.toFixed(1).replace(/\.0$/, ''); }