// Session 42 — Settings page + BookChip.

const fs = require('fs');
const path = require('path');
const WEB = path.join(__dirname, '..', '..', 'web', 'src');
const read = (rel) => fs.readFileSync(path.join(WEB, rel), 'utf8');
const { bookInfo } = require('../../web/src/lib/books');

describe('books lib (BookChip data)', () => {
  it('maps known books to brand colors (case-insensitive aliases)', () => {
    expect(bookInfo('DK')).toMatchObject({ name: 'DraftKings', fg: '#53D337' });
    expect(bookInfo('draftkings').mono).toBe('DK');
    // ESPN BET retired → theScore Bet (PENN) successor (item 7).
    expect(bookInfo('THESCORE')).toMatchObject({ name: 'theScore Bet', mono: 'TS' });
  });
  it('degrades unknown books to a neutral chip', () => {
    const b = bookInfo('ZZZ');
    expect(b.mono).toBe('ZZZ');
    expect(b.fg).toBe('#B8BCC8');
  });
});

describe('Settings page', () => {
  const src = read('app/settings/page.tsx');

  it('is a real page now (not a redirect)', () => {
    expect(src).not.toContain("redirect('/profile')");
    expect(src).toContain("'use client'");
  });

  it('renders the design sections', () => {
    for (const label of ['ACCOUNT', 'SUBSCRIPTION', 'NOTIFICATIONS', 'DISPLAY PREFERENCES', 'RESPONSIBLE PLAY', 'DANGER ZONE']) {
      expect(src).toContain(label);
    }
  });

  it('reads the plan tier from useAuth (consistent with nav/profile)', () => {
    expect(src).toContain('useAuth()');
    expect(src).toContain('tierLabel');
  });

  it('LINKS to /settings/security (does NOT replace the MFA page)', () => {
    expect(src).toContain('href="/settings/security"');
  });

  it('danger zone delete button is gated on typing DELETE exactly', () => {
    expect(src).toContain("deleteText === 'DELETE'");
    expect(src).toContain('disabled={!canDelete');
  });

  it('opens the existing Preferences modal via window.__prefs', () => {
    expect(src).toContain('window.__prefs');
  });

  it('does not fake account-deletion success', () => {
    // On a non-ok response we surface an honest message, not a success.
    expect(src).toContain('could not be completed');
  });
});

describe('BookChip.tsx', () => {
  const src = read('components/vyndr/BookChip.tsx');
  it('renders a mono tile from the books lib', () => {
    expect(src).toContain('bookInfo');
    expect(src).toContain('className="mono"');
  });
});
