/* Settings — the configuration surface that pillar pages deep-link into.
   v4.3: real screen. Holds the defaults and treatments that shape how
   the rest of Roundhouse behaves for this user. */

function Settings({ go }) {
  const [devTaps, setDevTaps] = React.useState(0);
  const [devUnlocked, setDevUnlocked] = React.useState(false);

  function handleVersionTap() {
    const next = devTaps + 1;
    setDevTaps(next);
    if (next >= 7) setDevUnlocked(true);
  }

  return (
    <>
      <TopBar title="Settings"/>
      <div className="screen">
        <BackRow to="home" label="Back" go={go}/>
        <CollapsingHero
          eyebrow="Defaults that shape your tracking"
          headline="Settings"
          summary="Account · Ranges · Ammo · Maintenance · Display · Data"
          right={<TourButton/>}
        />

        <SettingsAccount/>
        <SettingsTour/>
        <SettingsRanges/>
        <SettingsAmmoTracking/>
        <SettingsPlusButtons/>
        <SettingsMaintenance/>
        <SettingsDisplay/>
        <SettingsNotifications/>
        <SettingsData go={go}/>

        {devUnlocked && <SettingsDeveloper/>}

        <div
          onClick={handleVersionTap}
          className="rh-body-sm"
          style={{textAlign:'center', marginTop:20, color:'var(--rh-bone-700)', fontSize:11, userSelect:'none', cursor:'default'}}>
          Roundhouse · v0.0.1 prototype · Build May 13 2026
          {devTaps > 0 && devTaps < 7 && (
            <span style={{marginLeft:8, color:'var(--rh-bone-600)'}}>({7 - devTaps} more)</span>
          )}
        </div>
      </div>
    </>
  );
}

// ---------- ACCOUNT ----------
function SettingsAccount() {
  return (
    <>
      <LabelRule>Account</LabelRule>
      <div className="card" style={{padding:0}}>
        <SettingRow label="Name" value="Roman Andres"/>
        <SettingRow label="Email" value="r.andres@example.com"/>
        <SettingRow label="Member since" value="Nov 2023"/>
        <SettingRow label="Sign out" action="Sign out" tone="danger" last/>
      </div>
    </>
  );
}

// ---------- TOUR · replay ----------
function SettingsTour() {
  const launch = (id) => { if (window.__rhTour) window.__rhTour(id); };
  const tours = [
    {id:'overall',       label:'Roundhouse overview', sub:'High-level walkthrough of the whole app'},
    {id:'home',          label:'Home',                sub:'The ring + central loop + last session'},
    {id:'gear',          label:'Gear',                sub:'Four categories + customize + quick add'},
    {id:'supply',        label:'Supply',              sub:'Caliber health + lots + cost tracking'},
    {id:'maintain',      label:'Maintain',            sub:'Components + rules + log a service'},
    {id:'record',        label:'Record',              sub:'Per-gun history + goals + milestones'},
    {id:'servicerecord', label:'Service Record',      sub:'A gun\'s deep view + customize sections'},
    {id:'protect',       label:'Protect',             sub:'Documentation vault + claim packet'},
  ];
  return (
    <>
      <LabelRule>Tour · replay any time</LabelRule>
      <div className="card" style={{padding:0}}>
        {tours.map((t, i) => (
          <div
            key={t.id}
            onClick={()=>launch(t.id)}
            style={{
              padding:'12px 14px',
              borderBottom: i < tours.length-1 ? '1px solid var(--border-hairline)' : 'none',
              display:'grid', gridTemplateColumns:'1fr auto', gap:10, alignItems:'center',
              cursor:'pointer',
            }}>
            <div>
              <div className="label-md" style={{color:'var(--fg-1)', letterSpacing:'0.10em', fontSize:11, textTransform:'none'}}>{t.label}</div>
              <div className="rh-body-sm" style={{marginTop:3, color:'var(--rh-bone-500)', fontSize:11}}>{t.sub}</div>
            </div>
            <span style={{fontFamily:'var(--font-ui)', fontSize:10, letterSpacing:'0.16em', color:'var(--rh-brass-400)', textTransform:'uppercase', fontWeight:600}}>Replay →</span>
          </div>
        ))}
      </div>
    </>
  );
}

// ---------- RANGES ----------
function SettingsRanges() {
  return (
    <>
      <LabelRule more="+ Add">Ranges</LabelRule>
      <div className="card" style={{padding:0}}>
        <RangeRow name="Bell Range" type="Indoor · 25yd" isDefault/>
        <RangeRow name="Liberty Outdoor" type="Outdoor · 100yd"/>
        <RangeRow name="Home" type="Private" last/>
      </div>
      <div className="rh-body-sm" style={{padding:'8px 4px 0', color:'var(--rh-bone-500)', fontSize:11}}>
        Default range pre-fills "Where" when planning a trip.
      </div>
    </>
  );
}

function RangeRow({ name, type, isDefault, last }) {
  return (
    <div style={{display:'grid', gridTemplateColumns:'1fr auto auto', gap:10, alignItems:'center', padding:'12px 14px', borderBottom: last ? 'none' : '1px solid var(--border-hairline)'}}>
      <div>
        <div style={{fontFamily:'var(--font-display)', fontSize:15, color:'var(--fg-1)', letterSpacing:'0.02em', lineHeight:1}}>{name}</div>
        <div className="label-md" style={{marginTop:3, color:'var(--rh-bone-500)', fontSize:9}}>{type}</div>
      </div>
      {isDefault && (
        <span style={{padding:'3px 7px', background:'var(--rh-brass-tint-08)', color:'var(--rh-brass-400)', border:'1px solid var(--rh-brass-tint-32)', fontFamily:'var(--font-ui)', fontSize:8, letterSpacing:'0.22em', textTransform:'uppercase', fontWeight:600}}>Default</span>
      )}
      <button style={{background:'transparent', border:0, color:'var(--rh-bone-500)', padding:0, cursor:'pointer', fontFamily:'var(--font-ui)', fontSize:10, letterSpacing:'0.16em', textTransform:'uppercase', fontWeight:600}}>Edit</button>
    </div>
  );
}

// ---------- AMMO TRACKING ----------
function SettingsAmmoTracking() {
  const [trainingMode, setTrainingMode] = React.useState('weighted');
  const [defensiveMode, setDefensiveMode] = React.useState('weighted');
  const [matchMode, setMatchMode] = React.useState('lot');

  return (
    <>
      <LabelRule>Ammo tracking</LabelRule>
      <div className="card" style={{padding:'12px 14px'}}>
        <div className="rh-body-sm" style={{color:'var(--rh-bone-300)', marginBottom:10}}>
          How ammo is counted from your inventory. <strong style={{color:'var(--fg-1)'}}>Weighted average</strong> pools by caliber+grain+use and uses one cost-per-round. <strong style={{color:'var(--fg-1)'}}>Lot-specific</strong> picks exact lots per trip — more accurate, more friction.
        </div>
        <AmmoModeRow category="Training"  value={trainingMode}  onChange={setTrainingMode}/>
        <AmmoModeRow category="Defensive" value={defensiveMode} onChange={setDefensiveMode}/>
        <AmmoModeRow category="Match"     value={matchMode}     onChange={setMatchMode} last/>
      </div>
    </>
  );
}

function AmmoModeRow({ category, value, onChange, last }) {
  return (
    <div style={{padding:'10px 0', borderBottom: last ? 'none' : '1px solid var(--border-hairline)'}}>
      <div className="label-md" style={{color:'var(--rh-bone-500)', marginBottom:6}}>{category}</div>
      <div style={{display:'grid', gridTemplateColumns:'1fr 1fr', gap:6}}>
        <button onClick={()=>onChange('weighted')} style={{
          padding:'8px 10px',
          background: value==='weighted' ? 'var(--rh-brass)' : 'var(--bg-elevated-2)',
          color: value==='weighted' ? 'var(--rh-obsidian)' : 'var(--rh-bone-300)',
          border:`1px solid ${value==='weighted' ? 'var(--rh-brass)' : 'var(--border-default)'}`,
          borderRadius:2, cursor:'pointer',
          fontFamily:'var(--font-ui)', fontSize:10, letterSpacing:'0.14em',
          textTransform:'uppercase', fontWeight:600,
        }}>Weighted avg</button>
        <button onClick={()=>onChange('lot')} style={{
          padding:'8px 10px',
          background: value==='lot' ? 'var(--rh-brass)' : 'var(--bg-elevated-2)',
          color: value==='lot' ? 'var(--rh-obsidian)' : 'var(--rh-bone-300)',
          border:`1px solid ${value==='lot' ? 'var(--rh-brass)' : 'var(--border-default)'}`,
          borderRadius:2, cursor:'pointer',
          fontFamily:'var(--font-ui)', fontSize:10, letterSpacing:'0.14em',
          textTransform:'uppercase', fontWeight:600,
        }}>Lot-specific</button>
      </div>
    </div>
  );
}

// ---------- PLUS-BUTTON INCREMENTS ----------
function SettingsPlusButtons() {
  return (
    <>
      <LabelRule>Live-session +N defaults</LabelRule>
      <div className="card" style={{padding:'12px 14px'}}>
        <div className="rh-body-sm" style={{color:'var(--rh-bone-300)', marginBottom:10}}>
          The big +N button during a live session uses the default box size for each caliber.
        </div>
        <PlusNRow caliber="9mm" value={50}/>
        <PlusNRow caliber=".45 ACP" value={50}/>
        <PlusNRow caliber=".40 S&W" value={50}/>
        <PlusNRow caliber="5.56 / .223" value={30}/>
        <PlusNRow caliber=".308 / 7.62" value={20}/>
        <PlusNRow caliber=".22 LR" value={50} last/>
      </div>
    </>
  );
}

function PlusNRow({ caliber, value, last }) {
  return (
    <div style={{display:'grid', gridTemplateColumns:'1fr auto auto', gap:10, alignItems:'center', padding:'10px 0', borderBottom: last ? 'none' : '1px solid var(--border-hairline)'}}>
      <span style={{fontFamily:'var(--font-display)', fontSize:14, color:'var(--fg-1)', letterSpacing:'0.02em'}}>{caliber}</span>
      <input
        defaultValue={value}
        type="number"
        style={{width:64, background:'var(--bg-elevated-2)', border:'1px solid var(--border-default)', color:'var(--fg-1)', padding:'6px 8px', borderRadius:2, fontFamily:'var(--font-display)', fontSize:16, textAlign:'center'}}/>
      <span className="label-md" style={{color:'var(--rh-bone-500)'}}>rds /tap</span>
    </div>
  );
}

// ---------- MAINTENANCE DEFAULTS ----------
function SettingsMaintenance() {
  return (
    <>
      <LabelRule>Maintenance defaults</LabelRule>
      <div className="card" style={{padding:'12px 14px'}}>
        <div className="rh-body-sm" style={{color:'var(--rh-bone-300)', marginBottom:10}}>
          Seed values for new guns. You can override per-gun on each gun's Service Record.
        </div>
        <MaintenanceRuleRow rule="Standard clean" value="1,000 rds"/>
        <MaintenanceRuleRow rule="Deep clean / strip" value="2,500 rds"/>
        <MaintenanceRuleRow rule="Recoil spring (pistol)" value="5,000 rds"/>
        <MaintenanceRuleRow rule="Striker spring" value="5,000 rds"/>
        <MaintenanceRuleRow rule="Magazine springs" value="5,000 rds"/>
        <MaintenanceRuleRow rule="AR · BCG inspect" value="1,000 rds"/>
        <MaintenanceRuleRow rule="Optic battery" value="12 months" time last/>
      </div>
    </>
  );
}

function MaintenanceRuleRow({ rule, value, time, last }) {
  return (
    <div style={{display:'grid', gridTemplateColumns:'1fr auto auto', gap:10, alignItems:'center', padding:'10px 0', borderBottom: last ? 'none' : '1px solid var(--border-hairline)'}}>
      <span className="label-md" style={{color:'var(--rh-bone-300)', letterSpacing:'0.10em', fontSize:11, textTransform:'none'}}>{rule}</span>
      <span style={{fontFamily:'var(--font-display)', fontSize:14, color: time ? 'var(--rh-steel-400)' : 'var(--fg-1)', letterSpacing:'0.02em'}}>{value}</span>
      <button style={{background:'transparent', border:0, color:'var(--rh-bone-500)', padding:0, cursor:'pointer', fontFamily:'var(--font-ui)', fontSize:9, letterSpacing:'0.16em', textTransform:'uppercase', fontWeight:600}}>Edit</button>
    </div>
  );
}

// ---------- DISPLAY ----------
function SettingsDisplay() {
  const [showCost, setShowCost] = React.useState(true);
  const [accent, setAccent] = React.useState('brass');

  return (
    <>
      <LabelRule>Display</LabelRule>
      <div className="card" style={{padding:'12px 14px'}}>
        <ToggleRow
          label="Show lifetime spend"
          sub="Total ammo cost-to-date appears on Roundhouse Record"
          value={showCost}
          onChange={setShowCost}
        />
        <div style={{height:1, background:'var(--border-hairline)', margin:'10px 0'}}/>
        <div>
          <div className="label-md" style={{color:'var(--rh-bone-500)'}}>Accent color</div>
          <div className="rh-body-sm" style={{marginTop:4, color:'var(--rh-bone-300)', fontSize:11, marginBottom:10}}>Brand brass remains primary; this tunes the warmth.</div>
          <div style={{display:'flex', gap:8}}>
            {[
              {id:'brass',  color:'#B89A56', label:'Brass'},
              {id:'gold',   color:'#D9B870', label:'Gold'},
              {id:'bronze', color:'#A07A2A', label:'Bronze'},
            ].map(c => (
              <button key={c.id} onClick={()=>setAccent(c.id)} style={{
                flex:1, padding:'10px 8px',
                background: accent===c.id ? 'var(--bg-elevated-2)' : 'transparent',
                border:`1px solid ${accent===c.id ? c.color : 'var(--border-default)'}`,
                borderRadius:2, cursor:'pointer',
                display:'flex', flexDirection:'column', alignItems:'center', gap:6,
              }}>
                <span style={{width:18, height:18, borderRadius:'50%', background:c.color}}/>
                <span style={{fontFamily:'var(--font-ui)', fontSize:9, letterSpacing:'0.14em', color:'var(--rh-bone-300)', textTransform:'uppercase', fontWeight:600}}>{c.label}</span>
              </button>
            ))}
          </div>
        </div>
        <div style={{height:1, background:'var(--border-hairline)', margin:'10px 0'}}/>
        <div className="rh-body-sm" style={{color:'var(--rh-bone-500)', fontSize:11}}>
          Light mode is on the roadmap. Dark stays the signature.
        </div>
      </div>
    </>
  );
}

function ToggleRow({ label, sub, value, onChange }) {
  return (
    <div style={{display:'grid', gridTemplateColumns:'1fr auto', gap:10, alignItems:'center'}}>
      <div>
        <div className="label-md" style={{color:'var(--fg-1)', letterSpacing:'0.10em', fontSize:11, textTransform:'none'}}>{label}</div>
        {sub && <div className="rh-body-sm" style={{marginTop:3, color:'var(--rh-bone-500)', fontSize:11}}>{sub}</div>}
      </div>
      <button onClick={()=>onChange(!value)} style={{
        width:42, height:24,
        background: value ? 'var(--rh-brass)' : 'var(--bg-elevated-2)',
        border:`1px solid ${value ? 'var(--rh-brass)' : 'var(--border-strong)'}`,
        borderRadius:99, cursor:'pointer',
        padding:0,
        position:'relative',
        transition:'all 120ms ease',
      }}>
        <span style={{
          position:'absolute',
          top:'50%', left: value ? '20px' : '2px',
          transform:'translateY(-50%)',
          width:18, height:18, borderRadius:'50%',
          background: value ? 'var(--rh-obsidian)' : 'var(--rh-bone-300)',
          transition:'left 120ms ease',
        }}/>
      </button>
    </div>
  );
}

// ---------- NOTIFICATIONS ----------
function SettingsNotifications() {
  const [maintenance, setMaintenance] = React.useState(true);
  const [supply, setSupply] = React.useState(true);
  const [milestones, setMilestones] = React.useState(false);

  return (
    <>
      <LabelRule>Notifications</LabelRule>
      <div className="card" style={{padding:'12px 14px'}}>
        <div className="rh-body-sm" style={{color:'var(--rh-bone-500)', marginBottom:10, fontSize:11}}>
          In-app alerts only at MVP. Push notifications planned.
        </div>
        <ToggleRow label="Maintenance due" sub="Heads-up when a gun crosses its service threshold" value={maintenance} onChange={setMaintenance}/>
        <div style={{height:1, background:'var(--border-hairline)', margin:'10px 0'}}/>
        <ToggleRow label="Supply alerts" sub="When a caliber drops to LOW or CRITICAL" value={supply} onChange={setSupply}/>
        <div style={{height:1, background:'var(--border-hairline)', margin:'10px 0'}}/>
        <ToggleRow label="Milestones" sub="Round-count + session-count achievements" value={milestones} onChange={setMilestones}/>
      </div>
    </>
  );
}

// ---------- DATA & EXPORT ----------
function SettingsData({ go }) {
  return (
    <>
      <LabelRule>Data & export</LabelRule>
      <div className="card" style={{padding:0}}>
        <SettingRow label="Export Roundhouse Record" sub="PDF dossier of all gear + history" action="Export"/>
        <SettingRow label="Insurance claim packet" sub="Selected gear · serials · photos · receipts" action="Generate" onAction={()=>go('protect')}/>
        <SettingRow label="Download all data" sub="Raw JSON, for migration or backup" action="Download"/>
        <SettingRow label="Delete account" sub="Permanently remove all data — cannot be undone" action="Delete" tone="danger" last/>
      </div>
    </>
  );
}

// ---------- SHARED: setting row ----------
function SettingRow({ label, value, sub, action, tone, onAction, last }) {
  const actionColor = tone==='danger' ? '#E48A82' : 'var(--rh-brass-400)';
  return (
    <div style={{display:'grid', gridTemplateColumns:'1fr auto', gap:10, alignItems:'center', padding:'14px 14px', borderBottom: last ? 'none' : '1px solid var(--border-hairline)'}}>
      <div>
        <div className="label-md" style={{color:'var(--fg-1)', letterSpacing:'0.10em', fontSize:11, textTransform:'none'}}>{label}</div>
        {sub && <div className="rh-body-sm" style={{marginTop:3, color:'var(--rh-bone-500)', fontSize:11}}>{sub}</div>}
      </div>
      {value && <span style={{fontFamily:'var(--font-display)', fontSize:14, color:'var(--rh-bone-300)', letterSpacing:'0.02em'}}>{value}</span>}
      {action && (
        <button
          onClick={onAction}
          style={{
            background:'transparent', border:0, padding:0, cursor:'pointer',
            fontFamily:'var(--font-ui)', fontSize:10, letterSpacing:'0.16em',
            color:actionColor, textTransform:'uppercase', fontWeight:600,
          }}>
          {action} →
        </button>
      )}
    </div>
  );
}

// ---------- DEVELOPER (hidden — tap version 7×) ----------
function SettingsDeveloper() {
  const [populated, setPopulated] = React.useState(!(window.__rhEmptyMode));

  function toggle(val) {
    setPopulated(val);
    if (window.__rhSetEmptyMode) window.__rhSetEmptyMode(!val);
  }

  return (
    <>
      <LabelRule>Developer</LabelRule>
      <div className="card" style={{padding:'12px 14px'}}>
        <div className="rh-body-sm" style={{color:'var(--rh-bone-500)', marginBottom:12, fontSize:11}}>
          Switch between sample data and real empty state. Your data is never affected.
        </div>
        <div style={{display:'grid', gridTemplateColumns:'1fr 1fr', gap:6}}>
          <button onClick={()=>toggle(false)} style={{
            padding:'10px 8px',
            background: !populated ? 'var(--rh-brass)' : 'var(--bg-elevated-2)',
            color: !populated ? 'var(--rh-obsidian)' : 'var(--rh-bone-300)',
            border:`1px solid ${!populated ? 'var(--rh-brass)' : 'var(--border-default)'}`,
            borderRadius:2, cursor:'pointer',
            fontFamily:'var(--font-ui)', fontSize:10, letterSpacing:'0.14em',
            textTransform:'uppercase', fontWeight:600,
          }}>New user</button>
          <button onClick={()=>toggle(true)} style={{
            padding:'10px 8px',
            background: populated ? 'var(--rh-brass)' : 'var(--bg-elevated-2)',
            color: populated ? 'var(--rh-obsidian)' : 'var(--rh-bone-300)',
            border:`1px solid ${populated ? 'var(--rh-brass)' : 'var(--border-default)'}`,
            borderRadius:2, cursor:'pointer',
            fontFamily:'var(--font-ui)', fontSize:10, letterSpacing:'0.14em',
            textTransform:'uppercase', fontWeight:600,
          }}>Populated</button>
        </div>
      </div>
    </>
  );
}

window.Settings = Settings;
