/**
 * Durées saisies en valeur + unité (minutes, heures, jours) et stockées en
 * minutes côté serveur (plans SLA, règles d'escalade).
 */
export type DurationUnit = 'minutes' | 'hours' | 'days';

export type Duration = { value: string; unit: string };

export const durationUnits: Array<{ value: DurationUnit; label: string }> = [
    { value: 'minutes', label: 'minutes' },
    { value: 'hours', label: 'heures' },
    { value: 'days', label: 'jours' },
];

const factors: Record<DurationUnit, number> = {
    minutes: 1,
    hours: 60,
    days: 1440,
};

const isUnit = (unit: string): unit is DurationUnit => unit in factors;

export function splitMinutes(minutes: number): Duration {
    if (minutes > 0 && minutes % factors.days === 0) {
        return { value: String(minutes / factors.days), unit: 'days' };
    }

    if (minutes > 0 && minutes % factors.hours === 0) {
        return { value: String(minutes / factors.hours), unit: 'hours' };
    }

    return { value: String(minutes), unit: 'minutes' };
}

export function toMinutes(duration: Duration): number {
    const value = Number(duration.value);
    const factor = isUnit(duration.unit) ? factors[duration.unit] : 1;

    if (!Number.isFinite(value)) {
        return 0;
    }

    return Math.round(value * factor);
}

export function formatMinutes(minutes: number): string {
    const { value, unit } = splitMinutes(minutes);
    const suffix = unit === 'days' ? 'j' : unit === 'hours' ? 'h' : 'min';

    return `${value} ${suffix}`;
}
