export interface WeeklyDigestData { weekLabel: string; teamUtilizationPct: number; overbookedCount: number; openDemandCount: number; upcomingVacationCount: number; topResources: Array<{ name: string; utilizationPct: number }>; appBaseUrl: string; } export function buildWeeklyDigestHtml(data: WeeklyDigestData): string { const utilizationColor = data.teamUtilizationPct >= 90 ? "#d97706" : data.teamUtilizationPct >= 70 ? "#059669" : "#6b7280"; const resourceRows = data.topResources .map( (r) => ` ${r.name} ${Math.round(r.utilizationPct)}% `, ) .join(""); return `
${ data.topResources.length > 0 ? `` : "" }

Weekly Digest

CapaKraken — ${data.weekLabel}

${Math.round(data.teamUtilizationPct)}%

Team Utilization

${data.overbookedCount}

Overbooked

${data.openDemandCount}

Open Demand

${data.upcomingVacationCount}

On Vacation

Top Utilization

${resourceRows}
Resource Utilization
Open Timeline

CapaKraken · Automated weekly digest · Sent every Monday

`; } export function buildWeeklyDigestText(data: WeeklyDigestData): string { return `CapaKraken Weekly Digest — ${data.weekLabel} Team Utilization: ${Math.round(data.teamUtilizationPct)}% Overbooked: ${data.overbookedCount} Open Demand: ${data.openDemandCount} Upcoming Vacation: ${data.upcomingVacationCount} ${data.topResources.length > 0 ? `Top Utilization:\n${data.topResources.map((r) => ` ${r.name}: ${Math.round(r.utilizationPct)}%`).join("\n")}\n` : ""} Open Timeline: ${data.appBaseUrl}/timeline `; }