/**
 * @file utils.js
 * @description Gemensamma hjälpfunktioner för StatusNotifier Extension
 * 
 * Author: Linus Olofsson - Iver 
 * Date: 2025-07-03 
 * Last modified: Linus Olofsson (2025-07-03)
 * 
 * @purpose Tillhandahålla gemensamma hjälpfunktioner
 * @invoked_by Alla andra moduler
 * @invokes Ingen
 */

// Formatera datum till läsbart format
const formatDate = (date) => {
    if (!date) return 'Okänt datum';
    
    const options = { 
        year: 'numeric', 
        month: 'short', 
        day: 'numeric',
        hour: '2-digit',
        minute: '2-digit'
    };
    
    return new Date(date).toLocaleDateString('sv-SE', options);
};

// Formatera tid från sekunder till MM:SS
const formatTime = (seconds) => {
    if (seconds === null || seconds === undefined) return '--:--';
    
    const minutes = Math.floor(seconds / 60);
    const remainingSeconds = Math.floor(seconds % 60);
    
    return `${minutes.toString().padStart(2, '0')}:${remainingSeconds.toString().padStart(2, '0')}`;
};

// Slumpa ordningen på en array
const shuffleArray = (array) => {
    if (!Array.isArray(array) || array.length === 0) return [];
    
    const newArray = [...array];
    for (let i = newArray.length - 1; i > 0; i--) {
        const j = Math.floor(Math.random() * (i + 1));
        [newArray[i], newArray[j]] = [newArray[j], newArray[i]];
    }
    
    return newArray;
};

// Generera ett slumpmässigt ID
const generateId = () => {
    return Math.random().toString(36).substring(2, 15) + 
           Math.random().toString(36).substring(2, 15);
};

// Trunkera text om den är för lång
const truncateText = (text, maxLength = 50) => {
    if (!text) return '';
    if (text.length <= maxLength) return text;
    
    return text.substring(0, maxLength) + '...';
};

// Beräkna kvarvarande SLA-tid från completeDueDate
const calculateSlaRemaining = (completeDueDate) => {
    if (!completeDueDate) return { text: 'N/A', expired: false };
    
    const now = new Date();
    const dueDate = new Date(completeDueDate);
    const diffMs = dueDate - now;
    
    if (diffMs <= 0) {
        return { text: 'UTGÅTT', expired: true };
    }
    
    const days = Math.floor(diffMs / (1000 * 60 * 60 * 24));
    const hours = Math.floor((diffMs % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
    const minutes = Math.floor((diffMs % (1000 * 60 * 60)) / (1000 * 60));
    
    if (days > 0) {
        return { text: `${days}d ${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`, expired: false };
    }
    return { text: `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`, expired: false };
};

// Exportera funktioner
export {
    formatDate,
    formatTime,
    shuffleArray,
    generateId,
    truncateText,
    calculateSlaRemaining
};
