export function pipelineSeverity(status: string) { switch (status) { case "activo": return "success"; case "listo_gafete": return "info"; case "impreso": return "warn"; case "baja": return "danger"; default: return "secondary"; } } export function riskLevel(code: string): "alto" | "medio" | "bajo" { switch (code) { case "rojo": case "negro": case "naranja": case "alto": return "alto"; case "amarillo": case "medio": return "medio"; default: return "bajo"; } } export function riskLevelLabel(code: string) { const labels = { alto: "Alto", medio: "Medio", bajo: "Bajo" }; return labels[riskLevel(code)]; } export function riskLevelSeverity(code: string) { switch (riskLevel(code)) { case "alto": return "danger"; case "medio": return "warn"; default: return "success"; } } export function hireSeverity(hire: string) { const h = (hire || "").toUpperCase(); if (h === "FISICA") return "contrast"; if (h === "ARCOTEC") return "warn"; if (h === "ARCTEC" || h.startsWith("ARCT")) return "info"; return "secondary"; } export function riskSeverity(code: string) { switch (code) { case "rojo": return "danger"; case "amarillo": case "naranja": return "warn"; case "verde": return "success"; case "azul": return "info"; default: return "secondary"; } } export function pipelineLabel(status: string) { const labels: Record = { incompleto: "Falta expediente", listo_gafete: "Listo gafete", impreso: "Gafete impreso", activo: "Activo en proyecto", baja: "Baja", }; return labels[status] || status; } export function gafeteLabel(status: string) { switch (status) { case "incompleto": return "Sin gafete"; case "listo_gafete": return "Por imprimir"; case "impreso": case "activo": return "Impreso"; default: return "—"; } } export function gafeteSeverity(status: string) { switch (status) { case "incompleto": return "danger"; case "listo_gafete": return "warn"; case "impreso": case "activo": return "success"; default: return "secondary"; } } export function projectStatusSeverity(status: string) { switch (status) { case "activo": return "success"; case "pausado": return "warn"; case "concluido": return "info"; case "cancelado": return "danger"; default: return "secondary"; } } export function projectStatusLabel(status: string) { const labels: Record = { activo: "Activo", pausado: "Pausado", concluido: "Concluido", cancelado: "Cancelado", }; return labels[status] || status; } export function initials(first?: string, last?: string) { if (last) return `${first?.[0] ?? ""}${last?.[0] ?? ""}`.toUpperCase() || "?"; const parts = (first || "").trim().split(/\s+/).filter(Boolean); if (parts.length >= 2) return `${parts[0][0]}${parts[1][0]}`.toUpperCase(); return (first || "?").slice(0, 2).toUpperCase(); } export function useUi() { return { pipelineSeverity, riskSeverity, riskLevel, riskLevelLabel, riskLevelSeverity, hireSeverity, pipelineLabel, gafeteLabel, gafeteSeverity, projectStatusSeverity, projectStatusLabel, initials, }; }