import type { Counts } from '../../shared/api/types/status'; export const RING_RADIUS = 62; const RING_CIRCUMFERENCE = 2 * Math.PI * RING_RADIUS; const RING_GAP = 5; const FULL_PERCENT = 100; export type RingGeometry = { workingLength: number; problemLength: number; workingDash: string; problemDash: string; workingPercent: number; }; export function problemCount( counts: Counts ): number { return counts.broken + counts.blocked + counts.moved; } export function ringGeometry( counts: Counts ): RingGeometry { const hasLinks = counts.total > 0; const workingShare = hasLinks ? counts.working / counts.total : 0; const problemShare = hasLinks ? problemCount( counts ) / counts.total : 0; const workingLength = workingShare * RING_CIRCUMFERENCE; const problemLength = problemShare * RING_CIRCUMFERENCE; const visibleWorkingLength = Math.max( 0, workingLength - RING_GAP ); return { workingLength, problemLength, workingDash: `${ String( visibleWorkingLength ) } ${ String( RING_CIRCUMFERENCE ) }`, problemDash: `${ String( problemLength ) } ${ String( RING_CIRCUMFERENCE ) }`, workingPercent: hasLinks ? workingShare * FULL_PERCENT : FULL_PERCENT, }; }