/**
 * SeverityConfig — Single source of truth for severity styling.
 *
 * Used by: ScansPage, ReportsPage, RecentScans, ScanDetails,
 *          SeverityChart, ReportSummary, and any future component needing severity display.
 *
 * Each severity level provides:
 *   text      — Tailwind text colour class
 *   bg        — Solid background class (for badges on dark/image backgrounds)
 *   badgeBg   — Semi-transparent background (for lozenge overlays on thumbnails)
 *   icon      — Material Symbol icon name
 *   label     — Short label ("Low", "Mod", "High", "Critical")
 *   labelLong — Long label ("Low Risk", "Moderate", "High Risk", "Critical")
 *   order     — Numeric sort order (0=low, 3=critical)
 */
var SeverityConfig = {
    levels: {
        low:      { text: 'text-primary',    bg: 'bg-primary',    badgeBg: 'bg-white/90',       icon: 'eco',       label: 'Low',      labelLong: 'Low Risk',  order: 0 },
        moderate: { text: 'text-[#d4a373]',  bg: 'bg-[#d4a373]',  badgeBg: 'bg-[#d4a373]/90',   icon: 'info',      label: 'Mod',      labelLong: 'Moderate',  order: 1 },
        high:     { text: 'text-warning',    bg: 'bg-warning',    badgeBg: 'bg-warning/90',     icon: 'warning',   label: 'High',     labelLong: 'High Risk', order: 2 },
        critical: { text: 'text-warning',    bg: 'bg-warning',    badgeBg: 'bg-warning/90',     icon: 'error',     label: 'Critical', labelLong: 'Critical',  order: 3 },
    },

    get: function (severity) {
        return SeverityConfig.levels[severity] || SeverityConfig.levels.low;
    },

    // Badge text colour: white on coloured backgrounds, primary on white (low)
    badgeText: function (severity) {
        return severity === 'low' ? 'text-primary' : 'text-white';
    },

    // Numeric order for sorting
    order: function (severity) {
        var lvl = SeverityConfig.levels[severity];
        return lvl ? lvl.order : 0;
    },

    // Compare function for sorting (highest severity first)
    compare: function (a, b) {
        return SeverityConfig.order(b) - SeverityConfig.order(a);
    },

    // Derive severity key + label from a percentage (CR-02: single source of truth)
    fromPercentage: function (pct) {
        var severity = 'low';
        if (pct >= 80) severity = 'critical';
        else if (pct >= 60) severity = 'high';
        else if (pct >= 40) severity = 'moderate';
        var labelMap = { low: 'Low', moderate: 'Moderate', high: 'High', critical: 'Critical' };
        return { severity: severity, label: labelMap[severity] };
    },
};

window.SeverityConfig = SeverityConfig;
