// Shared mock data + theme tokens lifted from src/constants/theme.ts
// All four variants pull from this so numbers stay consistent across artboards.

const RVU = {
  // ─ palette (matches theme.ts) ─
  navyDark:   '#0F2B5B',
  navy:       '#1E4080',
  navyLight:  '#2D5DA6',
  bg:         '#F7F6F2',
  surface:    '#FFFFFF',
  surfaceAlt: '#F0EFE9',
  text:       '#111827',
  textSec:    '#4B5563',
  textMuted:  '#9CA3AF',
  border:     '#E2DFD6',
  borderLt:   '#EDECE6',
  teal:       '#3DCFBD',
  tealDeep:   '#0E9C8A',
  tealLight:  '#A8EDE6',
  success:    '#059669',
  warning:    '#D97706',
  destructive:'#DC2626',

  // ─ stack ─
  fontUI:   '-apple-system, BlinkMacSystemFont, "SF Pro Text", "Inter", system-ui, sans-serif',
  fontNum:  '"SF Pro Display", -apple-system, BlinkMacSystemFont, "Inter", system-ui, sans-serif',
  fontMono: '"SF Mono", ui-monospace, "JetBrains Mono", Menlo, monospace',
};

// ─ Mock profile / stats ──────────────────────────────────────────────────────
const MOCK = {
  profile: {
    role:         'Physician',
    specialty:    'Internal Medicine',
    localityName: 'Manhattan, NY',
    annualGoal:   6200,
    feeYear:      2026,
  },
  stats: {
    totalWRVU:           3184.52,
    progress:            0.5136,           // 51.4%
    perDayTarget:        24.61,            // goal / 252 work days
    rvuPerWorkDayNeeded: 22.45,
    workDaysElapsed:     118,
    workDaysRemaining:   134,
    projectedYearEnd:    6803,
    pacePct:             +0.097,           // +9.7% vs pace
    avgPerDay:           26.99,
    daysLogged:          118,
    streakDays:          17,
    // synthetic monthly buckets (Jan..May @ ~midway through May)
    monthly: [
      { m: 'Jan', v: 612.4 },
      { m: 'Feb', v: 698.2 },
      { m: 'Mar', v: 742.8 },
      { m: 'Apr', v: 678.5 },
      { m: 'May', v: 452.6 },     // partial
      { m: 'Jun', v: 0 },
      { m: 'Jul', v: 0 },
      { m: 'Aug', v: 0 },
      { m: 'Sep', v: 0 },
      { m: 'Oct', v: 0 },
      { m: 'Nov', v: 0 },
      { m: 'Dec', v: 0 },
    ],
    // 30-day sparkline daily values (most recent on right)
    spark30: [
      18.2, 24.6, 0, 28.4, 31.2, 22.1, 26.8, 0,
      25.3, 29.7, 27.4, 24.9, 0, 0, 31.5, 28.2,
      26.4, 0, 29.1, 32.6, 25.8, 27.3, 0, 28.9,
      30.4, 26.7, 24.2, 28.8, 0, 31.1,
    ],
    // cumulative wRVU points (% of year vs % of goal)
    paceCurve: [
      [0, 0], [0.08, 0.10], [0.16, 0.21], [0.25, 0.32],
      [0.33, 0.43], [0.42, 0.51],
    ],
    careMix: [
      { label: 'Office',     pct: 0.62, color: '#1E4080' },
      { label: 'Hospital',   pct: 0.21, color: '#3DCFBD' },
      { label: 'Telehealth', pct: 0.11, color: '#2D5DA6' },
      { label: 'Procedure',  pct: 0.06, color: '#A8EDE6' },
    ],
    topCodes: [
      { code: '99214', desc: 'Office visit, est, moderate',     count: 142, total: 656.20 },
      { code: '99213', desc: 'Office visit, est, low',          count:  98, total: 312.62 },
      { code: '99204', desc: 'Office visit, new, moderate',     count:  47, total: 309.31 },
      { code: '99215', desc: 'Office visit, est, high',         count:  31, total: 220.41 },
      { code: '99205', desc: 'Office visit, new, high',         count:  18, total: 154.62 },
    ],
    visitTypes: {
      newPt:  { ytdCount: 87,  ytdRVU: 538.6, mtdCount: 14, mtdRVU:  88.4 },
      estPt:  { ytdCount: 312, ytdRVU: 1284.2,mtdCount: 41, mtdRVU: 168.1 },
    },
  },
  // Recent encounter groups (most recent first)
  encounterDays: [
    {
      date: 'Thu, May 22',
      total: 23.86,
      rows: [
        { code: '99214', desc: 'Office visit, established, moderate',   rvu: 4.62 },
        { code: '99214', desc: 'Office visit, established, moderate',   rvu: 4.62 },
        { code: '99204', desc: 'Office visit, new patient, moderate',   rvu: 6.58 },
        { code: '99213', desc: 'Office visit, established, low',        rvu: 3.19 },
        { code: '99213', desc: 'Office visit, established, low',        rvu: 3.19 },
      ],
    },
    {
      date: 'Wed, May 21',
      total: 27.43,
      rows: [
        { code: '99215', desc: 'Office visit, established, high',       rvu: 7.11 },
        { code: '99214', desc: 'Office visit, established, moderate',   rvu: 4.62 },
        { code: '99214', desc: 'Office visit, established, moderate',   rvu: 4.62 },
        { code: '99214', desc: 'Office visit, established, moderate',   rvu: 4.62 },
        { code: '99213', desc: 'Office visit, established, low',        rvu: 3.19 },
        { code: '99213', desc: 'Office visit, established, low',        rvu: 3.19 },
      ],
    },
    {
      date: 'Tue, May 20',
      total: 21.45,
      rows: [
        { code: '99205', desc: 'Office visit, new patient, high',       rvu: 8.59 },
        { code: '99214', desc: 'Office visit, established, moderate',   rvu: 4.62 },
        { code: '99213', desc: 'Office visit, established, low',        rvu: 3.19 },
        { code: '99213', desc: 'Office visit, established, low',        rvu: 3.19 },
      ],
    },
  ],
};

// ─ tiny number formatters ────────────────────────────────────────────────────
const fmt = {
  rvu:  (n) => n.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 }),
  rvu1: (n) => n.toLocaleString('en-US', { minimumFractionDigits: 1, maximumFractionDigits: 1 }),
  rvu0: (n) => Math.round(n).toLocaleString('en-US'),
  pct:  (n) => `${(n * 100).toFixed(1)}%`,
  pct0: (n) => `${Math.round(n * 100)}%`,
  signed: (n, d = 1) => (n >= 0 ? '+' : '') + n.toFixed(d),
};

Object.assign(window, { RVU, MOCK, fmt });
