/* Pure display transforms for the player profile page (Session 42).
   CommonJS so it's unit-testable + importable from the .tsx page. */

/** Two-letter mono initials for the hero avatar. */
function initials(name) {
  const parts = String(name || '').trim().split(/\s+/).filter(Boolean);
  if (parts.length === 0) return '??';
  if (parts.length === 1) return parts[0].slice(0, 2).toUpperCase();
  return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();
}

const SPORT_LABELS = { nba: 'NBA', mlb: 'MLB', wnba: 'WNBA', soccer: 'SOC' };
function sportLabel(sport) {
  return SPORT_LABELS[String(sport || '').toLowerCase()] || String(sport || '').toUpperCase();
}

/** Prop DNA → flat list of { prop, state, color } for the grid (reliable first). */
function dnaRows(propDNA) {
  const dna = propDNA || { reliable: [], volatile: [] };
  const pretty = (s) => String(s).replace(/_/g, ' ').replace(/\b\w/g, (c) => c.toUpperCase());
  return [
    ...(dna.reliable || []).map((p) => ({ prop: pretty(p), state: 'RELIABLE', color: '#00D4A0' })),
    ...(dna.volatile || []).map((p) => ({ prop: pretty(p), state: 'VOLATILE', color: '#FFB347' })),
  ];
}

/** Short human readout under the DNA bar, e.g. "Primary lane: Power Pull". */
function blendReadout(archetype) {
  if (!archetype || !archetype.primary) return '';
  const prim = archetype.primary.name;
  const sec = archetype.secondary ? `, supported by ${title(archetype.secondary.name)}` : '';
  return `Primary lane: ${title(prim)}${sec}.`;
}

function title(s) {
  return String(s || '').toLowerCase().replace(/\b\w/g, (c) => c.toUpperCase());
}

module.exports = { initials, sportLabel, dnaRows, blendReadout, title };
