export interface CompareDelta {
    diff: number;
    percent: number | null;
    direction: 'up' | 'down' | 'flat';
    label: string;
}

export function calcDelta(current: number, previous: number): CompareDelta {
    const diff = current - previous;

    if (diff === 0) {
        return { diff: 0, percent: 0, direction: 'flat', label: '0%' };
    }

    if (previous === 0) {
        return {
            diff,
            percent: null,
            direction: diff > 0 ? 'up' : 'down',
            label: diff > 0 ? 'Baru' : 'N/A',
        };
    }

    const percent = (diff / previous) * 100;
    return {
        diff,
        percent,
        direction: diff > 0 ? 'up' : 'down',
        label: `${percent > 0 ? '+' : ''}${percent.toFixed(1)}%`,
    };
}

export function formatSignedNumber(value: number, suffix = ''): string {
    const prefix = value > 0 ? '+' : '';
    return `${prefix}${value}${suffix}`;
}

export function formatComparePrevious(value: number, suffix = ''): string {
    const formatted = Number.isInteger(value)
        ? value.toLocaleString('id-ID')
        : value.toLocaleString('id-ID', { maximumFractionDigits: 1 });
    return `${formatted}${suffix}`;
}
