// OM Group ERP — Sales Order Transaction Intelligence Panel
// Replaces the simple item-only drill-down with a full lifecycle view.
// Only exported symbol: window.SalesDrillDown
// Depends on: Store, window.fmtCur, window.fmtDate, window.Badge (all global)

const { useState: sdSt, useMemo: sdMemo } = React;

/* ── SVG icon set (Lucide outline, 24×24) ────────────────── */
const SD_IC = {
  clipboard:   'M9 5H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2M9 5a2 2 0 0 0 2 2h2a2 2 0 0 0 2-2M9 12h6M9 16h4',
  building:    'M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2zM9 22V12h6v10',
  folder:      'M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z',
  package:     'M12 2L2 7l10 5 10-5-10-5zM2 17l10 5 10-5M2 12l10 5 10-5',
  wallet:      'M21 12V7H5a2 2 0 0 1 0-4h14v4M3 5v14a2 2 0 0 0 2 2h16v-5M18 12a2 2 0 0 0 0 4h3v-4z',
  truck:       'M1 3h15v13H1zM16 8h4l3 3v5h-7V8zM5.5 19a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3zM18.5 19a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3z',
  creditCard:  'M2 6a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2zM2 10h20M7 15h2M12 15h5',
  fileText:    'M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8zM14 2v6h6M16 13H8M16 17H8M10 9H8',
  factory:     'M2 20a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V8l-7 5V8l-7 5V4a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2z',
  barChart:    'M3 3v18h18M18 9v9M13 5v13M8 12v6',
  trendingUp:  'M3 17l5-5 4 4 8-8M16 7h5v5',
  clock:       'M12 2a10 10 0 1 0 0 20A10 10 0 0 0 12 2zM12 6v6l4 2',
  link:        'M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71',
  activity:    'M22 12h-4l-3 9L9 3l-3 9H2',
  user:        'M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2M12 11a4 4 0 1 0 0-8 4 4 0 0 0 0 8z',
};
function SdIcon({ name, size, col }) {
  var d = SD_IC[name]; if (!d) return null; var sz = size||14;
  return (
    <svg width={sz} height={sz} viewBox="0 0 24 24" fill="none"
         stroke={col||'currentColor'} strokeWidth={1.75} strokeLinecap="round" strokeLinejoin="round"
         style={{flexShrink:0,display:'block'}}>
      <path d={d}/>
    </svg>
  );
}

/* ── helpers ─────────────────────────────────────────────── */
function sdN(v) { return v || '—'; }
function sdC(v) { return window.fmtCur ? window.fmtCur(v||0) : '₹'+Number(v||0).toLocaleString('en-IN'); }
function sdD(v) { return v ? (window.fmtDate ? window.fmtDate(v) : v) : '—'; }
function sdPct(a,b) { return b ? ((a/b)*100).toFixed(1)+'%' : '—'; }

/* ── tiny status badge ───────────────────────────────────── */
function SDBadge({v, size}) {
  if (!v) return <span style={{color:'var(--txt3)',fontSize:size||10}}>—</span>;
  const map = {
    'Delivered':       ['#DCFCE7','#15803D'],
    'Completed':       ['#DCFCE7','#15803D'],
    'Paid':            ['#DCFCE7','#15803D'],
    'Fully Settled':   ['#DCFCE7','#15803D'],
    'Approved':        ['#DCFCE7','#15803D'],
    'Active':          ['#DCFCE7','#15803D'],
    'Pending':         ['#FEF9C3','#A16207'],
    'Partially Settled':['#FEF9C3','#A16207'],
    'In Transit':      ['#DBEAFE','#1D4ED8'],
    'Partially Paid':  ['#FEF9C3','#A16207'],
    'Unpaid':          ['#FEE2E2','#DC2626'],
    'Unsettled':       ['#FEE2E2','#DC2626'],
    'Cancelled':       ['#F3F4F6','#6B7280'],
    'Draft':           ['#F3F4F6','#6B7280'],
    'No Transport':    ['#F3F4F6','#57534E'],
  };
  const [bg, col] = map[v] || ['#EDE9FE','#6D28D9'];
  return (
    <span style={{
      display:'inline-flex', alignItems:'center', gap:3,
      background:bg, color:col, borderRadius:4, padding:'2px 7px',
      fontSize:size||10, fontWeight:700, letterSpacing:'0.02em', whiteSpace:'nowrap'
    }}>
      <span style={{width:5,height:5,borderRadius:'50%',background:col,display:'inline-block',flexShrink:0}}></span>
      {v}
    </span>
  );
}

/* ── labelled field ──────────────────────────────────────── */
function SDField({label, value, mono, accent, wrap}) {
  return (
    <div style={{minWidth:0}}>
      <div style={{fontSize:9.5,fontWeight:700,color:'var(--txt3)',letterSpacing:'0.06em',textTransform:'uppercase',marginBottom:2}}>{label}</div>
      <div style={{
        fontSize:12,fontWeight:500,color:accent?'var(--or)':'var(--txt)',
        fontFamily:mono?'var(--font)':undefined,
        wordBreak:wrap?'break-word':'normal',
        lineHeight:1.4,
      }}>{value||'—'}</div>
    </div>
  );
}

/* ── section header ──────────────────────────────────────── */
function SDSec({icon, title, badge, children, accent}) {
  return (
    <div style={{marginBottom:18}}>
      <div style={{
        display:'flex', alignItems:'center', gap:7, marginBottom:10,
        paddingBottom:7, borderBottom:`2px solid ${accent||'var(--bdr)'}`,
      }}>
        {icon && <span style={{display:'flex',alignItems:'center',color:'var(--txt3)',flexShrink:0}}>{icon}</span>}
        <span style={{fontSize:11,fontWeight:700,color:'var(--txt)',letterSpacing:'0.03em',textTransform:'uppercase'}}>{title}</span>
        {badge && <span style={{marginLeft:'auto'}}>{badge}</span>}
      </div>
      {children}
    </div>
  );
}

/* ── KPI mini card ───────────────────────────────────────── */
function SDKPI({label, value, sub, color, bg}) {
  return (
    <div style={{
      background:bg||'#F9FAFB', border:'1px solid var(--bdr)', borderRadius:8,
      padding:'9px 12px', minWidth:0,
    }}>
      <div style={{fontSize:9,fontWeight:700,color:'var(--txt3)',textTransform:'uppercase',letterSpacing:'0.06em',marginBottom:3}}>{label}</div>
      <div className="kpi-val" style={{fontSize:15,fontWeight:700,color:color||'var(--txt)',lineHeight:1.2}}>{value}</div>
      {sub && <div style={{fontSize:10,color:'var(--txt2)',marginTop:2}}>{sub}</div>}
    </div>
  );
}

/* ── timeline step ───────────────────────────────────────── */
function SDTimelineStep({done, active, label, date, user, ref_, last}) {
  const col = done ? '#16A34A' : active ? 'var(--or)' : 'var(--bdr2)';
  return (
    <div style={{display:'flex',gap:10,alignItems:'flex-start',minWidth:0}}>
      <div style={{display:'flex',flexDirection:'column',alignItems:'center',flexShrink:0}}>
        <div style={{
          width:20,height:20,borderRadius:'50%',
          background:done?'#16A34A':active?'var(--or)':'#F3F4F6',
          border:`2px solid ${col}`,
          display:'flex',alignItems:'center',justifyContent:'center',
          flexShrink:0,
        }}>
          {done && <span style={{color:'#fff',fontSize:10,fontWeight:700}}>✓</span>}
          {active && <span style={{width:6,height:6,borderRadius:'50%',background:'var(--or)',display:'block'}}></span>}
        </div>
        {!last && <div style={{width:2,flex:1,background:done?'#16A34A':'var(--bdr)',minHeight:20,marginTop:2}}></div>}
      </div>
      <div style={{paddingBottom:last?0:14,minWidth:0,flex:1}}>
        <div style={{fontSize:12,fontWeight:600,color:done?'var(--txt)':active?'var(--or)':'var(--txt3)'}}>{label}</div>
        {date && <div style={{fontSize:10.5,color:'var(--txt2)',marginTop:1}}>{sdD(date)}{user?' · '+user:''}</div>}
        {ref_ && <div style={{fontSize:10,color:'var(--txt3)',marginTop:1,fontFamily:'var(--font)'}}>{ref_}</div>}
      </div>
    </div>
  );
}

/* ══════════════════════════════════════════════════════════
   MAIN COMPONENT
══════════════════════════════════════════════════════════ */
function SalesDrillDown({ o, isGroup }) {
  const [tab, setTab] = sdSt('overview');
  const [activePanel, setActivePanel] = sdSt(null); // 'transport'|'settlement'|'customer'|null

  /* ── gather linked records ─────────────────────────────── */
  const linked = sdMemo(function() {
    const allPurchases   = Store.all('purchases') || [];
    const allTransport   = Store.all('transportEntries') || [];
    const allSettlements = Store.all('settlementRecords') || [];
    const allStockMvmts  = Store.all('stockMovements') || [];
    const allCustomers   = Store.all('customers') || [];
    const allVendors     = Store.all('vendors') || [];
    const allTransporters= Store.all('transportersList') || [];
    const allCrushers    = Store.all('crushers') || [];
    const allAuditLogs   = Store.all('auditLogs') || [];

    // Transport entries (all trips linked to this sales order)
    const transportEntries = allTransport.filter(function(t) { return t._salesId === o.id; });
    const te = transportEntries[0] || null;

    // Purchase: same vehicle + same date (best-effort link since no direct purchaseId on SO)
    const purchase = allPurchases.find(function(p) {
      return p.vehicleFull === o.vehicleFull && p.date === o.date &&
             (p.companyId === o.companyId || !p.companyId);
    });

    // Settlement records containing this order's challan
    const settlements = allSettlements.filter(function(s) {
      var rows = s.challanRows || [];
      return rows.some(function(r) {
        return r.salesOrderId === o.id || r.purchaseId === o.id ||
               (o.challanNumber && r.challanNumber === o.challanNumber);
      });
    });

    // Stock movements referencing this challan
    const stockMvmts = allStockMvmts.filter(function(sm) {
      return sm.reference === o.challanNumber || sm.sourceRef === o.id ||
             sm.orderId === o.id || sm.salesOrderId === o.id;
    });

    // Customer full record
    const customer = allCustomers.find(function(c) { return c.id === o.customerId; });

    // Vendor for purchase
    const vendor = purchase ? allVendors.find(function(v) { return v.id === purchase.vendorId; }) : null;

    // Transporter master record
    const transporter = o.transporterMasterId
      ? allTransporters.find(function(t) { return t.id === o.transporterMasterId; })
      : null;

    // Crusher record
    const crusher = o.crusherSite
      ? allCrushers.find(function(c) { return c.id === o.crusherSite; })
      : null;

    // Audit logs for this order
    const logs = allAuditLogs.filter(function(l) {
      return l.recordId === o.id || (l.ref && l.ref.indexOf(o.challanNumber||'__') !== -1);
    }).slice(0,10);

    return { te, purchase, settlements, stockMvmts, customer, vendor, transporter, crusher, logs };
  }, [o.id]);

  const { te, transportEntries, purchase, settlements, stockMvmts, customer, vendor, transporter, crusher, logs } = linked;

  /* ── financial calcs ───────────────────────────────────── */
  const fin = sdMemo(function() {
    // Always recalculated fresh via the centralized GstEngine — never trust
    // stored subtotal/gstAmount/total fields, which may carry stale/legacy
    // GST math. See store.js GstEngine.recalcRecord / window.gAmt.
    const subtotal = window.gSub(o);
    const gstAmt   = window.gGst(o);
    const total    = window.gAmt(o);
    const qty      = parseFloat(o.quantity) || 0;

    const purchCost = purchase ? window.gAmt(purchase) : 0;
    const purchSub  = purchase ? window.gSub(purchase) : 0;
    const transportCost = te ? (parseFloat(te.amount) || parseFloat(te.transportAmount) || 0) : 0;

    const grossProfit = total - purchCost - transportCost;
    const profitPct   = total > 0 ? ((grossProfit / total) * 100).toFixed(1) : '—';
    const profitPerTon = qty > 0 ? (grossProfit / qty).toFixed(2) : '—';
    const revenuePerTon = qty > 0 ? (total / qty).toFixed(2) : '—';

    return { subtotal, gstAmt, total, qty, purchCost, purchSub, transportCost,
             grossProfit, profitPct, profitPerTon, revenuePerTon };
  }, [o, te, purchase]);

  /* ── order items ───────────────────────────────────────── */
  const items = o.items?.length
    ? o.items
    : [{ materialId: o.materialId, uom: o.uom||'MT', quantity: o.quantity,
         ratePerTon: o.rate||0, gst: o.gst||5, amount: o.subtotal||0 }];

  /* ── timeline steps ────────────────────────────────────── */
  const tl = (function() {
    const steps = [];
    const isDone = function(cond) { return !!cond; };

    steps.push({ label:'Sales Order Created', done:true, date:o.date, user:o.createdBy, ref_:o.challanNumber });

    if (o.transportRequired !== 'No') {
      steps.push({ label:'Vehicle Assigned', done:!!(o.vehicleFull), date:o.vehicleFull?o.date:null, ref_:o.vehicleFull });
    }

    if (purchase) {
      steps.push({ label:'Material Purchased', done:true, date:purchase.date, user:'', ref_:purchase.challanNumber });
    }

    if (te) {
      steps.push({ label:'Transport Entry Generated', done:true, date:te.date||o.date, ref_:te.challanNumber||te.id?.slice(0,8) });
    }

    const isDelivered = o.status === 'Delivered' || o.status === 'Completed';
    steps.push({ label:'Delivered', done:isDelivered, date:isDelivered?o.date:null, active:!isDelivered && o.status==='Pending' });

    const settl = settlements[0];
    const isSettled = settl && (settl.status === 'Paid' || settl.status === 'Fully Settled');
    steps.push({ label:'Transport Settled', done:isSettled, date:isSettled?settl.paidDate:null,
                 active:settl && !isSettled, ref_:settl?settl.id?.slice(0,8):null });

    return steps;
  })();

  /* ── panel shared styles ──────────────────────────────── */
  const _pw = { background:'#fff', border:'1px solid var(--bdr)', borderRadius:10, marginBottom:14, overflow:'hidden', boxShadow:'0 2px 8px rgba(0,0,0,.05)' };
  const _ph = { display:'flex', alignItems:'center', justifyContent:'space-between', padding:'10px 14px', background:'#FAFAF9', borderBottom:'1px solid var(--bdr)' };
  const _pt = { display:'flex', alignItems:'center', gap:7, fontSize:12, fontWeight:700, color:'var(--txt)' };
  const _pc = { border:'none', background:'none', cursor:'pointer', fontSize:16, color:'var(--txt3)', lineHeight:1, padding:'2px 4px', borderRadius:4, transition:'color .12s' };
  const _pe = { padding:'28px 20px', textAlign:'center', color:'var(--txt2)' };

  /* ── Purchase Panel ────────────────────────────────────── */
  function PurchasePanel() {
    if (!purchase) return (
      <div style={_pw}>
        <div style={_ph}>
          <div style={_pt}><SdIcon name="package" size={13}/>Purchase Details</div>
          <button style={_pc} onClick={function(){setActivePanel(null);}} onMouseEnter={function(e){e.currentTarget.style.color='var(--err)';}} onMouseLeave={function(e){e.currentTarget.style.color='var(--txt3)';}} title="Close">×</button>
        </div>
        <div style={_pe}>
          <div style={{fontSize:28,marginBottom:8}}>📦</div>
          <div style={{fontWeight:600,fontSize:13,color:'var(--txt)',marginBottom:4}}>No purchase record linked to this transaction</div>
          <div style={{fontSize:11}}>No matching purchase was found. The engine links purchases by vehicle number and date.</div>
        </div>
      </div>
    );
    const vend = vendor || {};
    const pItems = purchase.items?.length
      ? purchase.items
      : [{ materialId: purchase.materialId, uom: purchase.uom||'MT', quantity: purchase.quantity,
           ratePerTon: purchase.ratePerTon||purchase.rate||0, gstPercent: purchase.gst||5,
           subtotal: purchase.subtotal||0, amount: purchase.subtotal||0 }];
    return (
      <div style={_pw}>
        <div style={_ph}>
          <div style={_pt}><SdIcon name="package" size={13}/>Purchase Details · {sdN(purchase.challanNumber)}</div>
          <button style={_pc} onClick={function(){setActivePanel(null);}} onMouseEnter={function(e){e.currentTarget.style.color='var(--err)';}} onMouseLeave={function(e){e.currentTarget.style.color='var(--txt3)';}} title="Close">×</button>
        </div>
        <div style={{padding:'12px 14px',display:'flex',flexDirection:'column',gap:12}}>
          <div className="dd-3col" style={{gap:10}}>
            <SDField label="Purchase Order / Challan" value={sdN(purchase.challanNumber)} mono accent />
            <SDField label="Purchase Date" value={sdD(purchase.date)} />
            <SDField label="Status" value={<SDBadge v={purchase.status} size={10}/>} />
            <SDField label="Vendor" value={sdN(vend.name||Store.name('vendors',purchase.vendorId))} />
            <SDField label="Vendor GST" value={sdN(vend.gst)} mono />
            <SDField label="Vendor Contact" value={sdN(vend.mobile||vend.contactPerson)} mono />
            <SDField label="Vehicle" value={sdN(purchase.vehicleFull)} mono />
            <SDField label="Crusher / Pickup" value={sdN(purchase.pickupAddress||purchase.crusherName)} />
            <SDField label="Royalty Pass" value={sdN(purchase.royaltyPass)} mono />
            <SDField label="Diesel Issued" value={purchase.dieselQty ? window.formatQuantity(Number(purchase.dieselQty))+' L' : '—'} />
            <SDField label="Diesel Source" value={sdN(purchase.dieselSource)} />
            <SDField label="Company" value={Store.name('companies',purchase.companyId)||'—'} />
          </div>
          <div style={{overflowX:'auto'}}>
            <table style={{width:'100%',borderCollapse:'collapse',fontSize:12,border:'1px solid var(--bdr)',minWidth:420,borderRadius:8,overflow:'hidden'}}>
              <thead>
                <tr style={{background:'#F9FAFB'}}>
                  {['Material','Qty','UOM','Rate','GST%','Subtotal','Total'].map(function(h){
                    const r=['Qty','Rate','Subtotal','Total'].includes(h);
                    return <th key={h} style={{padding:'5px 8px',textAlign:r?'right':'left',fontWeight:700,fontSize:10.5,color:'var(--txt2)',borderBottom:'1px solid var(--bdr)'}}>{h}</th>;
                  })}
                </tr>
              </thead>
              <tbody>
                {pItems.map(function(it,i){
                  const sub = parseFloat(it.subtotal)||parseFloat(it.amount)||(parseFloat(it.quantity||0)*parseFloat(it.ratePerTon||0));
                  const gp  = parseFloat(it.gstPercent||it.gst)||5;
                  const tot = sub + sub*gp/100;
                  return (
                    <tr key={i} style={{borderBottom:'1px solid #F3F4F6'}}>
                      <td style={{padding:'5px 8px',fontWeight:500}}>{Store.name('materials',it.materialId)||'—'}</td>
                      <td style={{padding:'5px 8px',textAlign:'right',fontWeight:700}}>{Number(it.quantity||0).toFixed(3)}</td>
                      <td style={{padding:'5px 8px',color:'var(--txt2)'}}>{it.uom||'MT'}</td>
                      <td style={{padding:'5px 8px',textAlign:'right'}}>{sdC(it.ratePerTon||it.rate||0)}</td>
                      <td style={{padding:'5px 8px',textAlign:'center',color:'var(--txt2)'}}>{gp}%</td>
                      <td style={{padding:'5px 8px',textAlign:'right'}}>{sdC(sub)}</td>
                      <td style={{padding:'5px 8px',textAlign:'right',fontWeight:700,color:'var(--ok)'}}>{sdC(tot)}</td>
                    </tr>
                  );
                })}
              </tbody>
              <tfoot>
                <tr style={{background:'#F0FDF4'}}>
                  <td colSpan="5" style={{padding:'6px 8px',textAlign:'right',fontWeight:700,color:'var(--txt2)',fontSize:11}}>Purchase Totals</td>
                  <td style={{padding:'6px 8px',textAlign:'right',fontWeight:700}}>{sdC(window.gSub(purchase))}</td>
                  <td style={{padding:'6px 8px',textAlign:'right',fontWeight:700,color:'var(--ok)',fontSize:13}}>{sdC(window.gAmt(purchase))}</td>
                </tr>
              </tfoot>
            </table>
          </div>
        </div>
      </div>
    );
  }

  /* ── Transport Panel ───────────────────────────────────── */
  function TransportPanel() {
    const trips = transportEntries || [];
    const allTpList = Store.all('transportersList') || [];
    return (
      <div style={_pw}>
        <div style={_ph}>
          <div style={_pt}><SdIcon name="truck" size={13}/>Transport Details{trips.length > 0 ? ' · '+trips.length+' trip'+(trips.length>1?'s':'') : ''}</div>
          <button style={_pc} onClick={function(){setActivePanel(null);}} onMouseEnter={function(e){e.currentTarget.style.color='var(--err)';}} onMouseLeave={function(e){e.currentTarget.style.color='var(--txt3)';}} title="Close">×</button>
        </div>
        {!trips.length ? (
          <div style={_pe}>
            <div style={{fontSize:28,marginBottom:8}}>🚛</div>
            <div style={{fontWeight:600,fontSize:13,color:'var(--txt)',marginBottom:4}}>No linked transport record found</div>
            <div style={{fontSize:11}}>No transport entry has been generated for this sales order yet. The auto-engine will create one when sufficient data is saved.</div>
          </div>
        ) : (
          <div style={{padding:'12px 14px',display:'flex',flexDirection:'column',gap:12}}>
            {trips.map(function(trip, idx) {
              const tp = allTpList.find(function(t){return t.id===trip.transporterId||t.id===trip.transporterMasterId;}) || {};
              return (
                <div key={trip.id||idx} style={trips.length>1?{border:'1px solid var(--bdr)',borderRadius:8,overflow:'hidden'}:{}}>
                  {trips.length > 1 && (
                    <div style={{background:'var(--or-lt)',padding:'4px 10px',fontSize:10.5,fontWeight:700,color:'var(--or)',borderBottom:'1px solid var(--or-bdr)'}}>Trip {idx+1} · {trip.challanNumber||trip.id?.slice(0,8).toUpperCase()||'—'}</div>
                  )}
                  <div style={trips.length>1?{padding:'10px 12px'}:{}}>
                    <div className="dd-3col" style={{gap:10}}>
                      <SDField label="Transporter" value={tp.name||sdN(trip.transporterName||trip.transporter)} />
                      <SDField label="Vehicle Number" value={sdN(trip.vehicleFull)} mono accent />
                      <SDField label="Vehicle Type" value={sdN(trip.vehicleType)} />
                      <SDField label="Driver" value={sdN(trip.driverName||trip.driver)} />
                      <SDField label="Route" value={sdN(trip.route)} />
                      <SDField label="Source / Crusher" value={sdN(trip.crusherName||trip.pickupAddress)} />
                      <SDField label="Destination" value={sdN(trip.customerName||trip.deliveryAddress||trip.destination)} />
                      <SDField label="Material" value={Store.name('materials',trip.materialId)||sdN(trip.materialName)} />
                      <SDField label="Quantity" value={trip.quantity ? Number(trip.quantity).toFixed(3)+' '+(trip.uom||'MT') : '—'} />
                      <SDField label="Transport Rate" value={trip.ratePerTon ? sdC(trip.ratePerTon)+'/ton' : '—'} />
                      <SDField label="Transport Amount" value={trip.amount ? sdC(trip.amount) : (trip.transportAmount ? sdC(trip.transportAmount) : '—')} accent />
                      <SDField label="Diesel Issued" value={trip.dieselQty ? window.formatQuantity(Number(trip.dieselQty))+' L' : '—'} />
                      <SDField label="Diesel Cost" value={trip.dieselCost ? sdC(trip.dieselCost) : '—'} />
                      <SDField label="Transport Status" value={<SDBadge v={trip.settlementStatus||trip.status||'Pending'} size={10}/>} />
                      <SDField label="Challan Number" value={sdN(trip.challanNumber)} mono />
                      <SDField label="Dispatch Date" value={sdD(trip.dispatchDate||trip.date)} />
                      <SDField label="Delivery Date" value={sdD(trip.deliveryDate)} />
                    </div>
                  </div>
                </div>
              );
            })}
          </div>
        )}
      </div>
    );
  }

  /* ── Settlement Panel ──────────────────────────────────── */
  function SettlementPanel() {
    return (
      <div style={_pw}>
        <div style={_ph}>
          <div style={_pt}><SdIcon name="creditCard" size={13}/>Settlement Details{settlements.length > 0 ? ' · '+settlements.length+' record'+(settlements.length>1?'s':'') : ''}</div>
          <button style={_pc} onClick={function(){setActivePanel(null);}} onMouseEnter={function(e){e.currentTarget.style.color='var(--err)';}} onMouseLeave={function(e){e.currentTarget.style.color='var(--txt3)';}} title="Close">×</button>
        </div>
        {!settlements.length ? (
          <div style={_pe}>
            <div style={{fontSize:28,marginBottom:8}}>📋</div>
            <div style={{fontWeight:600,fontSize:13,color:'var(--txt)',marginBottom:4}}>No settlement has been generated yet</div>
            <div style={{fontSize:11}}>No transporter settlement has been created for this transaction.</div>
          </div>
        ) : (
          <div style={{padding:'12px 14px',display:'flex',flexDirection:'column',gap:12}}>
            {settlements.map(function(s, idx) {
              const gross = parseFloat(s.grossFreight||s.totalAmount||s.netPayable||0);
              const diesel = parseFloat(s.dieselDeduction||s.dieselAmount||0);
              const other  = parseFloat(s.otherDeductions||s.deductions||0);
              const net    = parseFloat(s.netPayable||s.netAmount||(gross-diesel-other)||0);
              const rows   = s.challanRows||s.trips||[];
              return (
                <div key={s.id||idx} style={settlements.length>1?{border:'1px solid var(--bdr)',borderRadius:8,overflow:'hidden'}:{}}>
                  {settlements.length > 1 && (
                    <div style={{background:'#F0FDF4',padding:'4px 10px',fontSize:10.5,fontWeight:700,color:'#15803D',borderBottom:'1px solid #BBF7D0'}}>Settlement {idx+1} · {s.id?.slice(0,8).toUpperCase()||'—'}</div>
                  )}
                  <div style={settlements.length>1?{padding:'10px 12px'}:{}}>
                    <div className="dd-3col" style={{gap:10}}>
                      <SDField label="Settlement Number" value={sdN(s.settlementNumber||s.id?.slice(0,8).toUpperCase())} mono />
                      <SDField label="Settlement Date" value={sdD(s.date||s.settlementDate)} />
                      <SDField label="Transporter" value={Store.name('transportersList',s.transporterId)||sdN(s.transporterName)} />
                      <SDField label="Trips Included" value={rows.length > 0 ? rows.length+' trip'+(rows.length>1?'s':'') : '—'} />
                      <SDField label="Gross Freight" value={gross ? sdC(gross) : '—'} />
                      <SDField label="Diesel Deduction" value={diesel ? sdC(diesel) : '—'} />
                      <SDField label="Other Deductions" value={other ? sdC(other) : '—'} />
                      <SDField label="Net Payable" value={net ? sdC(net) : '—'} accent />
                      <SDField label="Settlement Status" value={<SDBadge v={s.status||'Pending'} size={10}/>} />
                      <SDField label="Payment Date" value={sdD(s.paidDate||s.paymentDate)} />
                      <SDField label="Payment Reference" value={sdN(s.paymentRef||s.paymentReference)} mono />
                      <SDField label="Notes" value={sdN(s.notes||s.remarks)} wrap />
                    </div>
                  </div>
                </div>
              );
            })}
          </div>
        )}
      </div>
    );
  }

  /* ── Customer Panel ────────────────────────────────────── */
  function CustomerPanel() {
    if (!customer) return (
      <div style={_pw}>
        <div style={_ph}>
          <div style={_pt}><SdIcon name="building" size={13}/>Customer Profile</div>
          <button style={_pc} onClick={function(){setActivePanel(null);}} onMouseEnter={function(e){e.currentTarget.style.color='var(--err)';}} onMouseLeave={function(e){e.currentTarget.style.color='var(--txt3)';}} title="Close">×</button>
        </div>
        <div style={_pe}>
          <div style={{fontSize:28,marginBottom:8}}>🏢</div>
          <div style={{fontWeight:600,fontSize:13,color:'var(--txt)',marginBottom:4}}>No customer information available</div>
          <div style={{fontSize:11}}>The customer linked to this order could not be found in the master records.</div>
        </div>
      </div>
    );
    const cust = customer;
    const allSalesOrders = Store.all('salesOrders') || [];
    const custOrders = allSalesOrders.filter(function(s){ return s.customerId === cust.id; });
    const totalRevenue = custOrders.reduce(function(sum,s){ return sum + window.gAmt(s); }, 0);
    const totalOrders  = custOrders.length;
    const avgOrderVal  = totalOrders > 0 ? totalRevenue / totalOrders : 0;
    const sorted       = custOrders.slice().sort(function(a,b){ return (b.date||'').localeCompare(a.date||''); });
    const lastDate     = sorted.length > 0 ? sorted[0].date : null;
    const outstanding  = custOrders.filter(function(s){ return s.status!=='Delivered'&&s.status!=='Completed'&&s.status!=='Cancelled'; }).reduce(function(sum,s){ return sum+window.gAmt(s); },0);
    const settledCount = custOrders.filter(function(s){ return s.settlementStatus==='Paid'||s.settlementStatus==='Fully Settled'; }).length;
    const payBehavior  = totalOrders===0 ? '—' : settledCount===totalOrders ? 'Prompt Payer' : settledCount > totalOrders*0.7 ? 'Good Payer' : 'Needs Follow-up';
    const matMap = {};
    custOrders.forEach(function(s){ if (s.materialId) matMap[s.materialId] = (matMap[s.materialId]||0)+(parseFloat(s.quantity)||0); });
    const topMats = Object.keys(matMap).sort(function(a,b){ return matMap[b]-matMap[a]; }).slice(0,3);
    const recent = sorted.slice(0,5);
    return (
      <div style={_pw}>
        <div style={_ph}>
          <div style={_pt}><SdIcon name="building" size={13}/>{cust.name||'Customer Profile'}</div>
          <div style={{display:'flex',gap:6,alignItems:'center'}}>
            <button onClick={function(){ window._erpNav && window._erpNav('customers'); }} style={{border:'1px solid var(--bdr)',background:'#fff',borderRadius:6,padding:'3px 10px',fontSize:10.5,fontWeight:600,color:'var(--txt2)',cursor:'pointer',transition:'all .12s'}} onMouseEnter={function(e){e.currentTarget.style.borderColor='var(--or)';e.currentTarget.style.color='var(--or)';}} onMouseLeave={function(e){e.currentTarget.style.borderColor='var(--bdr)';e.currentTarget.style.color='var(--txt2)';}}>Open in Customer Master →</button>
            <button style={_pc} onClick={function(){setActivePanel(null);}} onMouseEnter={function(e){e.currentTarget.style.color='var(--err)';}} onMouseLeave={function(e){e.currentTarget.style.color='var(--txt3)';}} title="Close">×</button>
          </div>
        </div>
        <div style={{padding:'12px 14px',display:'flex',flexDirection:'column',gap:12}}>
          <div className="dd-3col" style={{gap:10}}>
            <SDField label="Customer Name" value={sdN(cust.name)} />
            <SDField label="GST Number" value={sdN(cust.gst)} mono />
            <SDField label="Contact Person" value={sdN(cust.contactPerson)} />
            <SDField label="Phone" value={sdN(cust.mobile||cust.phone)} mono />
            <SDField label="Email" value={sdN(cust.email)} mono />
            <SDField label="Address" value={sdN(cust.address)} wrap />
            <SDField label="Credit Limit" value={cust.creditLimit ? sdC(cust.creditLimit) : '—'} />
            <SDField label="Credit Days" value={cust.creditDays ? cust.creditDays+' days' : '—'} />
            <SDField label="Payment Behaviour" value={payBehavior} />
          </div>
          <div style={{display:'grid',gridTemplateColumns:'repeat(3,1fr)',gap:8}}>
            <SDKPI label="Total Orders" value={totalOrders} bg="#F9FAFB" />
            <SDKPI label="Total Revenue" value={sdC(totalRevenue)} bg="#FFF7ED" color="var(--or)" />
            <SDKPI label="Avg Order Value" value={avgOrderVal ? sdC(avgOrderVal) : '—'} bg="#F9FAFB" />
            <SDKPI label="Outstanding" value={outstanding ? sdC(outstanding) : '₹0'} bg={outstanding>0?'#FEF9C3':'#F0FDF4'} color={outstanding>0?'#A16207':'#15803D'} />
            <SDKPI label="Last Order Date" value={sdD(lastDate)} bg="#F9FAFB" color="var(--txt2)" />
            <SDKPI label="Settled Orders" value={settledCount+' / '+totalOrders} bg="#F9FAFB" color="var(--txt2)" />
          </div>
          {topMats.length > 0 && (
            <div style={{border:'1px solid var(--bdr)',borderRadius:8,padding:'10px 12px'}}>
              <div style={{fontSize:9.5,fontWeight:700,color:'var(--txt3)',textTransform:'uppercase',letterSpacing:'0.06em',marginBottom:7}}>Top Purchased Materials</div>
              {topMats.map(function(mid){
                return (
                  <div key={mid} style={{display:'flex',alignItems:'center',justifyContent:'space-between',fontSize:12,padding:'3px 0',borderBottom:'1px solid #F3F4F6'}}>
                    <span style={{fontWeight:500}}>{Store.name('materials',mid)||mid}</span>
                    <span style={{color:'var(--txt2)',fontWeight:600}}>{window.formatQuantity(Number(matMap[mid]))} MT</span>
                  </div>
                );
              })}
            </div>
          )}
          {recent.length > 0 && (
            <div style={{border:'1px solid var(--bdr)',borderRadius:8,padding:'10px 12px'}}>
              <div style={{fontSize:9.5,fontWeight:700,color:'var(--txt3)',textTransform:'uppercase',letterSpacing:'0.06em',marginBottom:7}}>Recent Transactions</div>
              {recent.map(function(s,i){
                return (
                  <div key={s.id||i} style={{display:'grid',gridTemplateColumns:'1fr auto auto',gap:8,alignItems:'center',padding:'5px 0',borderBottom:i<recent.length-1?'1px solid #F3F4F6':'none',fontSize:11.5}}>
                    <div><span style={{fontWeight:600}}>{sdN(s.challanNumber)}</span><span style={{color:'var(--txt2)',marginLeft:6}}>{sdD(s.date)}</span></div>
                    <SDBadge v={s.status} size={10} />
                    <span style={{fontWeight:700,color:'var(--or)',minWidth:70,textAlign:'right'}}>{sdC(window.gAmt(s))}</span>
                  </div>
                );
              })}
            </div>
          )}
        </div>
      </div>
    );
  }

  /* ── quick-action buttons ──────────────────────────────── */
  function QuickActions() {
    const defs = [
      { id:'transport',  label:'Transport',  icon:<SdIcon name="truck" size={12}/>,      hasData:!!(transportEntries && transportEntries.length > 0) },
      { id:'settlement', label:'Settlement', icon:<SdIcon name="creditCard" size={12}/>, hasData:!!(settlements && settlements.length > 0) },
      { id:'customer',   label:'Customer',   icon:<SdIcon name="building" size={12}/>,   hasData:!!customer },
    ];
    const allBtns = [
      { id:'purchase', label:'Purchase', icon:<SdIcon name="package" size={12}/>, hasData:!!purchase },
      ...defs
    ];
    return (
      <div style={{display:'flex',gap:6,flexWrap:'wrap',marginBottom:12}}>
        {allBtns.map(function(b) {
          const isActive = activePanel === b.id;
          return (
            <button key={b.id}
              onClick={function(){
                setActivePanel(isActive ? null : b.id);
              }}
              style={{
                display:'inline-flex', alignItems:'center', gap:4,
                background: isActive ? 'var(--or)' : '#fff',
                border: isActive ? '1.5px solid var(--or)' : '1px solid var(--bdr)',
                borderRadius:7, padding:'4px 10px', fontSize:11, fontWeight:600,
                color: isActive ? '#fff' : (b.hasData ? 'var(--txt)' : 'var(--txt3)'),
                cursor:'pointer', transition:'background .15s,border-color .15s,color .15s,box-shadow .15s',
                boxShadow: isActive ? '0 2px 8px rgba(249,115,22,.25)' : 'none',
              }}
              onMouseEnter={function(e){ if (!isActive) { e.currentTarget.style.borderColor='var(--or)'; e.currentTarget.style.color='var(--or)'; e.currentTarget.style.background='var(--or-lt)'; } }}
              onMouseLeave={function(e){ if (!isActive) { e.currentTarget.style.borderColor='var(--bdr)'; e.currentTarget.style.color=b.hasData?'var(--txt)':'var(--txt3)'; e.currentTarget.style.background='#fff'; } }}
            >
              {b.icon}<span style={{marginLeft:4}}>{b.label}</span>
              {!b.hasData && b.id!=='purchase' && <span style={{marginLeft:3,fontSize:9,opacity:.55}}>—</span>}
            </button>
          );
        })}
      </div>
    );
  }

  /* ── tab bar ───────────────────────────────────────────── */
  const TABS = [
    {id:'overview',  label:'Overview'},
    {id:'items',     label:'Items & Finance'},
    {id:'logistics', label:'Logistics'},
    {id:'procurement',label:'Procurement'},
    {id:'timeline',  label:'Timeline'},
  ];
  if (logs.length) TABS.push({id:'audit', label:'Activity'});

  function TabBar() {
    return (
      <div style={{
        display:'flex', gap:0, borderBottom:'1px solid var(--bdr)',
        marginBottom:16, overflowX:'auto', scrollbarWidth:'none',
      }}>
        {TABS.map(function(t) {
          const active = tab === t.id;
          return (
            <button key={t.id} onClick={function(){setTab(t.id);}} style={{
              border:'none', background:'none', cursor:'pointer',
              padding:'7px 14px', fontSize:11.5, fontWeight:active?700:500,
              color:active?'var(--or)':'var(--txt2)',
              borderBottom:active?'2px solid var(--or)':'2px solid transparent',
              marginBottom:-1, whiteSpace:'nowrap', transition:'color .12s',
            }}>
              {t.label}
            </button>
          );
        })}
      </div>
    );
  }

  /* ── tab: overview ─────────────────────────────────────── */
  function TabOverview() {
    const custRec = customer || {};
    const activePO = (custRec.priceOrders||[]).find(function(p){return p.isActive;});
    return (
      <div>
        <SDSec icon={<SdIcon name="clipboard"/>} title="Order Details" accent="var(--or-bdr)">
          <div className="dd-3col" style={{gap:12,marginBottom:12}}>
            <SDField label="Sales Order / Challan" value={sdN(o.challanNumber)} mono />
            <SDField label="Order Date" value={sdD(o.date)} />
            <SDField label="Status" value={<SDBadge v={o.status} size={11} />} />
            {isGroup && <SDField label="Company" value={Store.name('companies', o.companyId)||'—'} />}
            <SDField label="Royalty Pass" value={sdN(o.royaltyPass)} mono />
            <SDField label="Transport Required" value={<SDBadge v={(o.transportRequired||'Yes')==='No'?'No Transport':'Transport'} size={10} />} />
          </div>
          {o.deliveryAddress && (
            <div style={{background:'#F9FAFB',border:'1px solid var(--bdr)',borderRadius:6,padding:'8px 12px'}}>
              <div style={{fontSize:9.5,fontWeight:700,color:'var(--txt3)',textTransform:'uppercase',letterSpacing:'0.06em',marginBottom:3}}>Delivery Address</div>
              <div style={{fontSize:12,color:'var(--txt)',lineHeight:1.5}}>{o.deliveryAddress}</div>
            </div>
          )}
        </SDSec>

        <SDSec icon={<SdIcon name="building"/>} title="Customer Information">
          <div className="dd-3col" style={{gap:12}}>
            <SDField label="Customer" value={Store.name('customers',o.customerId)||'—'} />
            <SDField label="GST Number" value={sdN(custRec.gst)} mono />
            <SDField label="Contact Person" value={sdN(custRec.contactPerson)} />
            <SDField label="Mobile" value={sdN(custRec.mobile)} mono />
            <SDField label="Active Price Order" value={activePO ? activePO.poNumber : 'None'} mono />
            <SDField label="Customer Address" value={sdN(custRec.address)} wrap />
          </div>
        </SDSec>

        <SDSec icon={<SdIcon name="folder"/>} title="Document References">
          <div className="dd-3col" style={{gap:12}}>
            <SDField label="Sales Challan" value={sdN(o.challanNumber)} mono accent />
            <SDField label="Royalty Pass" value={sdN(o.royaltyPass)} mono />
            <SDField label="Purchase Challan" value={purchase ? sdN(purchase.challanNumber) : 'Not Linked'} mono />
            <SDField label="Transport Entry" value={te ? (te.challanNumber||te.id?.slice(0,8).toUpperCase()) : 'Not Generated'} mono />
            <SDField label="Settlement No." value={settlements[0] ? settlements[0].id?.slice(0,8).toUpperCase() : 'Unsettled'} mono />
            <SDField label="Settlement Status" value={<SDBadge v={o.settlementStatus||'Unsettled'} size={10}/>} />
          </div>
        </SDSec>
      </div>
    );
  }

  /* ── tab: items & finance ──────────────────────────────── */
  function TabItems() {
    const { subtotal, gstAmt, total, qty, purchCost, transportCost,
            grossProfit, profitPct, profitPerTon, revenuePerTon } = fin;
    const profitColor = grossProfit >= 0 ? '#16A34A' : '#DC2626';
    return (
      <div>
        {/* Items table */}
        <SDSec icon={<SdIcon name="package"/>} title="Order Items" accent="var(--or-bdr)">
          <div style={{overflowX:'auto'}}>
            <table style={{width:'100%',borderCollapse:'collapse',fontSize:12,border:'1px solid var(--bdr)',minWidth:520}}>
              <thead>
                <tr style={{background:'#F9FAFB'}}>
                  {['Material','Qty','UOM','Rate','GST%','Line Total','With GST'].map(function(h) {
                    const r = ['Qty','Rate','Line Total','With GST'].includes(h);
                    return <th key={h} style={{padding:'6px 9px',textAlign:r?'right':'left',fontWeight:700,fontSize:10.5,color:'var(--txt2)',borderBottom:'1px solid var(--bdr)',whiteSpace:'nowrap'}}>{h}</th>;
                  })}
                </tr>
              </thead>
              <tbody>
                {items.map(function(it,i) {
                  const lt = parseFloat(it.amount)||0;
                  const gRate = parseFloat(it.gst)||parseFloat(it.gstPercent)||0;
                  const ltg = Math.round((lt + lt * gRate / 100) * 100) / 100;
                  return (
                    <tr key={i} style={{borderBottom:'1px solid #F3F4F6'}}>
                      <td style={{padding:'6px 9px',fontWeight:500}}>{Store.name('materials',it.materialId)||'—'}</td>
                      <td style={{padding:'6px 9px',textAlign:'right',fontWeight:700}}>{Number(it.quantity||0).toFixed(3)}</td>
                      <td style={{padding:'6px 9px',color:'var(--txt2)'}}>{it.uom||'MT'}</td>
                      <td style={{padding:'6px 9px',textAlign:'right'}}>{sdC(it.ratePerTon)}</td>
                      <td style={{padding:'6px 9px',textAlign:'center',color:'var(--txt2)'}}>{gRate}%</td>
                      <td style={{padding:'6px 9px',textAlign:'right',fontWeight:600}}>{sdC(lt)}</td>
                      <td style={{padding:'6px 9px',textAlign:'right',fontWeight:700,color:'var(--or)'}}>{sdC(ltg)}</td>
                    </tr>
                  );
                })}
              </tbody>
              <tfoot>
                <tr style={{background:'#FFF9F5'}}>
                  <td colSpan="5" style={{padding:'7px 9px',textAlign:'right',fontWeight:700,color:'var(--txt2)',fontSize:11}}>Order Totals</td>
                  <td style={{padding:'7px 9px',textAlign:'right',fontWeight:700}}>{sdC(subtotal)}</td>
                  <td style={{padding:'7px 9px',textAlign:'right',fontWeight:700,color:'var(--or)',fontSize:13}}>{sdC(total)}</td>
                </tr>
              </tfoot>
            </table>
          </div>
        </SDSec>

        {/* Financial KPIs */}
        <SDSec icon={<SdIcon name="wallet"/>} title="Financial Summary">
          <div className="dd-3col" style={{gap:8,marginBottom:8}}>
            <SDKPI label="Subtotal (Pre-GST)" value={sdC(subtotal)} bg="#F9FAFB" color="var(--txt)" />
            <SDKPI label="GST Amount" value={sdC(gstAmt)} bg="#F9FAFB" color="var(--info)" />
            <SDKPI label="Total Invoice Value" value={sdC(total)} bg="#FFF7ED" color="var(--or)" />
          </div>
          <div className="dd-3col" style={{gap:8,marginBottom:8}}>
            <SDKPI label="Purchase Cost" value={purchCost>0?sdC(purchCost):'Not Linked'} bg="#F9FAFB" color="var(--txt2)" sub={purchase?'Linked by vehicle+date':'No matching purchase'} />
            <SDKPI label="Transport Cost" value={transportCost>0?sdC(transportCost):'—'} bg="#F9FAFB" color="var(--txt2)" sub={te?'From transport entry':'No transport entry'} />
            <SDKPI label="Gross Profit" value={purchCost>0?sdC(grossProfit):'—'} bg={purchCost>0?(grossProfit>=0?'#F0FDF4':'#FEF2F2'):'#F9FAFB'} color={purchCost>0?profitColor:'var(--txt3)'} />
          </div>
          <div className="dd-3col" style={{gap:8}}>
            <SDKPI label="Profit %" value={purchCost>0?profitPct+'%':'—'} color={purchCost>0?profitColor:'var(--txt3)'} />
            <SDKPI label="Revenue per Ton" value={sdC(revenuePerTon)} color="var(--txt)" />
            <SDKPI label="Profit per Ton" value={purchCost>0?sdC(profitPerTon):'—'} color={purchCost>0?profitColor:'var(--txt3)'} />
          </div>
        </SDSec>
      </div>
    );
  }

  /* ── tab: logistics ────────────────────────────────────── */
  function TabLogistics() {
    const transpName = transporter ? transporter.name : (o.transporterName || '—');
    return (
      <div>
        <SDSec icon={<SdIcon name="truck"/>} title="Delivery & Vehicle" accent="var(--or-bdr)">
          <div className="dd-3col" style={{gap:12,marginBottom:12}}>
            <SDField label="Vehicle Number" value={sdN(o.vehicleFull)} mono accent />
            <SDField label="Transporter" value={transpName} />
            <SDField label="Crusher / Loading Point" value={crusher ? crusher.name : (o.crusherSite ? Store.name('crushers',o.crusherSite)||o.crusherSite : '—')} />
            <SDField label="Delivery Address" value={sdN(o.deliveryAddress)} wrap />
            <SDField label="Order Date" value={sdD(o.date)} />
            <SDField label="Delivery Status" value={<SDBadge v={o.status} size={10}/>} />
          </div>
          {crusher && (
            <div className="dd-3col" style={{gap:12}}>
              <SDField label="Crusher Location" value={sdN(crusher.location)} />
              <SDField label="Crusher Owner" value={sdN(crusher.owner)} />
              <SDField label="Crusher Materials" value={sdN(crusher.materials)} />
            </div>
          )}
        </SDSec>

        {te ? (
          <SDSec icon={<SdIcon name="fileText"/>} title="Transport Entry">
            <div className="dd-3col" style={{gap:12,marginBottom:12}}>
              <SDField label="Entry Date" value={sdD(te.date)} />
              <SDField label="Challan / Trip Ref" value={sdN(te.challanNumber)||te.id?.slice(0,8).toUpperCase()} mono />
              <SDField label="Vehicle" value={sdN(te.vehicleFull)} mono />
              <SDField label="Quantity" value={te.quantity ? Number(te.quantity).toFixed(3)+' '+( te.uom||'MT') : '—'} />
              <SDField label="Transport Rate" value={te.ratePerTon ? sdC(te.ratePerTon)+'/ton' : '—'} />
              <SDField label="Transport Amount" value={te.amount ? sdC(te.amount) : '—'} accent />
              <SDField label="Route / From" value={sdN(te.crusherName||te.pickupAddress)} />
              <SDField label="Customer" value={sdN(te.customerName)} />
              <SDField label="Settlement Status" value={<SDBadge v={te.settlementStatus||o.settlementStatus||'Pending'} size={10}/>} />
            </div>
          </SDSec>
        ) : o.transportRequired !== 'No' ? (
          <SDSec icon={<SdIcon name="fileText"/>} title="Transport Entry">
            <div style={{padding:'14px 0',color:'var(--txt2)',fontSize:12,textAlign:'center'}}>
              No transport entry linked. The auto-engine will generate one when sufficient data is saved.
            </div>
          </SDSec>
        ) : (
          <SDSec icon={<SdIcon name="fileText"/>} title="Transport">
            <div style={{background:'#F3F4F6',borderRadius:7,padding:'10px 14px',fontSize:12,color:'var(--txt2)'}}>
              Customer pickup / direct delivery — no transport record generated for this order.
            </div>
          </SDSec>
        )}

        {/* Settlement summary */}
        {settlements.length > 0 && (
          <SDSec icon={<SdIcon name="creditCard"/>} title="Transport Settlement">
            <div className="dd-3col" style={{gap:12}}>
              <SDField label="Settlement ID" value={settlements[0].id?.slice(0,8).toUpperCase()} mono />
              <SDField label="Status" value={<SDBadge v={settlements[0].status} size={10}/>} />
              <SDField label="Transporter" value={sdN(settlements[0].transporterName)} />
              <SDField label="Period" value={settlements[0].periodFrom && settlements[0].periodTo ? sdD(settlements[0].periodFrom)+' – '+sdD(settlements[0].periodTo) : '—'} />
              <SDField label="Net Payable" value={settlements[0].netPayable ? sdC(settlements[0].netPayable) : '—'} accent />
              <SDField label="Paid Date" value={sdD(settlements[0].paidDate)} />
            </div>
          </SDSec>
        )}
      </div>
    );
  }

  /* ── tab: procurement ──────────────────────────────────── */
  function TabProcurement() {
    if (!purchase) {
      return (
        <div>
          <SDSec icon={<SdIcon name="package"/>} title="Procurement Traceability">
            <div style={{
              background:'#FFF7ED',border:'1px solid var(--or-bdr)',borderRadius:8,
              padding:'16px 18px',textAlign:'center',color:'var(--txt2)',fontSize:12,lineHeight:1.8,
            }}>
              <div style={{fontWeight:700,color:'var(--txt)',marginBottom:4}}>No Purchase Linked</div>
              The system links purchases by matching the same vehicle number on the same date.
              No purchase found for vehicle <strong>{o.vehicleFull||'—'}</strong> on {sdD(o.date)}.
            </div>
          </SDSec>
        </div>
      );
    }
    const pItems = purchase.items?.length ? purchase.items : [{
      materialId: purchase.materialId, uom:'MT',
      quantity: purchase.quantity||0, ratePerTon: purchase.subtotal/(purchase.quantity||1),
      gstPercent: 5, subtotal: purchase.subtotal||0,
    }];
    const vendorRec = vendor || {};
    return (
      <div>
        <SDSec icon={<SdIcon name="package"/>} title="Purchase Details" accent="#BBF7D0">
          <div style={{background:'#F0FDF4',border:'1px solid #BBF7D0',borderRadius:6,padding:'7px 12px',marginBottom:10,fontSize:11,color:'#166534',fontWeight:600}}>
            ✓ Matched by Vehicle {o.vehicleFull} on {sdD(o.date)}
          </div>
          <div className="dd-3col" style={{gap:12,marginBottom:12}}>
            <SDField label="Purchase Date" value={sdD(purchase.date)} />
            <SDField label="Purchase Challan" value={sdN(purchase.challanNumber)} mono accent />
            <SDField label="Royalty Pass" value={sdN(purchase.royaltyPass)} mono />
            <SDField label="Status" value={<SDBadge v={purchase.status} size={10}/>} />
            <SDField label="Diesel Qty" value={purchase.dieselQty ? window.formatQuantity(Number(purchase.dieselQty))+' L' : '—'} />
            <SDField label="Diesel Source" value={sdN(purchase.dieselSource)} />
          </div>
        </SDSec>

        <SDSec icon={<SdIcon name="factory"/>} title="Vendor / Crusher Source">
          <div className="dd-3col" style={{gap:12}}>
            <SDField label="Vendor" value={sdN(vendorRec.name||Store.name('vendors',purchase.vendorId))} />
            <SDField label="Vendor GST" value={sdN(vendorRec.gst)} mono />
            <SDField label="Vendor Contact" value={sdN(vendorRec.mobile)} mono />
            <SDField label="Pickup Address" value={sdN(purchase.pickupAddress)} />
          </div>
        </SDSec>

        <SDSec icon={<SdIcon name="barChart"/>} title="Purchase Items">
          <div style={{overflowX:'auto'}}>
            <table style={{width:'100%',borderCollapse:'collapse',fontSize:12,border:'1px solid var(--bdr)',minWidth:480}}>
              <thead>
                <tr style={{background:'#F9FAFB'}}>
                  {['Material','Qty','UOM','Rate','GST%','Subtotal','Total'].map(function(h){
                    const r=['Qty','Rate','Subtotal','Total'].includes(h);
                    return <th key={h} style={{padding:'5px 8px',textAlign:r?'right':'left',fontWeight:700,fontSize:10.5,color:'var(--txt2)',borderBottom:'1px solid var(--bdr)'}}>{h}</th>;
                  })}
                </tr>
              </thead>
              <tbody>
                {pItems.map(function(it,i){
                  const sub = parseFloat(it.subtotal)||parseFloat(it.amount)||(parseFloat(it.quantity||0)*parseFloat(it.ratePerTon||0));
                  const gp  = parseFloat(it.gstPercent)||5;
                  const tot = sub + sub*gp/100;
                  return (
                    <tr key={i} style={{borderBottom:'1px solid #F3F4F6'}}>
                      <td style={{padding:'5px 8px',fontWeight:500}}>{Store.name('materials',it.materialId)||'—'}</td>
                      <td style={{padding:'5px 8px',textAlign:'right',fontWeight:700}}>{Number(it.quantity||0).toFixed(3)}</td>
                      <td style={{padding:'5px 8px',color:'var(--txt2)'}}>{it.uom||'MT'}</td>
                      <td style={{padding:'5px 8px',textAlign:'right'}}>{sdC(it.ratePerTon)}</td>
                      <td style={{padding:'5px 8px',textAlign:'center',color:'var(--txt2)'}}>{gp}%</td>
                      <td style={{padding:'5px 8px',textAlign:'right'}}>{sdC(sub)}</td>
                      <td style={{padding:'5px 8px',textAlign:'right',fontWeight:700,color:'var(--ok)'}}>{sdC(tot)}</td>
                    </tr>
                  );
                })}
              </tbody>
              <tfoot>
                <tr style={{background:'#F0FDF4'}}>
                  <td colSpan="5" style={{padding:'6px 8px',textAlign:'right',fontWeight:700,color:'var(--txt2)',fontSize:11}}>Purchase Totals</td>
                  <td style={{padding:'6px 8px',textAlign:'right',fontWeight:700}}>{sdC(window.gSub(purchase))}</td>
                  <td style={{padding:'6px 8px',textAlign:'right',fontWeight:700,color:'var(--ok)',fontSize:13}}>{sdC(window.gAmt(purchase))}</td>
                </tr>
              </tfoot>
            </table>
          </div>
        </SDSec>

        {/* Profit comparison */}
        <SDSec icon={<SdIcon name="trendingUp"/>} title="Sale vs Purchase Margin">
          <div className="dd-3col" style={{gap:8}}>
            <SDKPI label="Purchase Amount" value={sdC(window.gAmt(purchase))} bg="#F0FDF4" color="#15803D" />
            <SDKPI label="Sale Amount" value={sdC(window.gAmt(o))} bg="#FFF7ED" color="var(--or)" />
            <SDKPI label="Gross Spread" value={sdC(window.gAmt(o)-window.gAmt(purchase))}
              bg={window.gAmt(o)>=window.gAmt(purchase)?'#F0FDF4':'#FEF2F2'}
              color={window.gAmt(o)>=window.gAmt(purchase)?'#15803D':'#DC2626'} />
          </div>
        </SDSec>
      </div>
    );
  }

  /* ── tab: timeline ─────────────────────────────────────── */
  function TabTimeline() {
    return (
      <div>
        <SDSec icon={<SdIcon name="clock"/>} title="Transaction Timeline" accent="var(--or-bdr)">
          <div style={{padding:'6px 0 0 6px'}}>
            {tl.map(function(step, i) {
              return (
                <SDTimelineStep key={i}
                  done={step.done} active={step.active}
                  label={step.label} date={step.date}
                  user={step.user} ref_={step.ref_}
                  last={i===tl.length-1}
                />
              );
            })}
          </div>
        </SDSec>

        {/* Related records summary */}
        <SDSec icon={<SdIcon name="link"/>} title="Related Records">
          <div className="dd-3col" style={{gap:8}}>
            <SDKPI label="Transport Entry" value={te?'Linked':'Not Generated'} bg={te?'#F0FDF4':'#F9FAFB'} color={te?'#15803D':'var(--txt3)'} sub={te?te.challanNumber||te.id?.slice(0,8).toUpperCase():''} />
            <SDKPI label="Purchase" value={purchase?'Matched':'Not Found'} bg={purchase?'#F0FDF4':'#F9FAFB'} color={purchase?'#15803D':'var(--txt3)'} sub={purchase?purchase.challanNumber:''} />
            <SDKPI label="Settlements" value={settlements.length>0?settlements.length+' record(s)':'Unsettled'} bg={settlements.length>0?'#F0FDF4':'#FEF9C3'} color={settlements.length>0?'#15803D':'#A16207'} />
          </div>
          {stockMvmts.length > 0 && (
            <div style={{marginTop:10}}>
              <div style={{fontSize:10,fontWeight:700,color:'var(--txt3)',textTransform:'uppercase',letterSpacing:'0.06em',marginBottom:6}}>Stock Movements</div>
              {stockMvmts.map(function(sm,i){
                return (
                  <div key={i} style={{background:'#F9FAFB',border:'1px solid var(--bdr)',borderRadius:6,padding:'7px 12px',marginBottom:5,fontSize:11.5}}>
                    <span style={{fontWeight:600}}>{sdD(sm.date)}</span>
                    <span style={{color:'var(--txt2)',marginLeft:8}}>{sm.type||'Movement'}</span>
                    <span style={{marginLeft:8}}>{Store.name('materials',sm.materialId)||'—'}</span>
                    <span style={{marginLeft:8,fontWeight:700}}>
                      {sm.type?.toLowerCase().includes('out')||sm.type==='Sale'?'−':'+'}
                      {Number(sm.quantity||0).toFixed(3)} {sm.uom||'MT'}
                    </span>
                  </div>
                );
              })}
            </div>
          )}
        </SDSec>
      </div>
    );
  }

  /* ── tab: audit log ────────────────────────────────────── */
  function TabAudit() {
    if (!logs.length) return (
      <div style={{padding:'20px',color:'var(--txt2)',fontSize:12,textAlign:'center'}}>No audit log entries found for this order.</div>
    );
    return (
      <div>
        <SDSec icon={<SdIcon name="activity"/>} title="Activity Log">
          {logs.map(function(l,i){
            return (
              <div key={i} style={{
                borderBottom:'1px solid var(--bdr)',padding:'8px 0',
                display:'grid',gridTemplateColumns:'1fr 2fr 1fr',gap:8,alignItems:'start',
                fontSize:11.5,
              }}>
                <div style={{color:'var(--txt2)'}}>{sdD(l.date||l.timestamp)}</div>
                <div>
                  <span style={{fontWeight:700,color:'var(--txt)'}}>{l.action||l.type||'Edit'}</span>
                  {l.module&&<span style={{color:'var(--txt2)',marginLeft:4}}>· {l.module}</span>}
                  {l.description&&<div style={{color:'var(--txt2)',marginTop:2}}>{l.description}</div>}
                </div>
                <div style={{color:'var(--txt2)',textAlign:'right'}}>{l.user||l.userName||'—'}</div>
              </div>
            );
          })}
        </SDSec>
      </div>
    );
  }

  /* ── render ────────────────────────────────────────────── */
  return (
    <div style={{
      background:'linear-gradient(180deg,#FFFAF5 0%,#FFFFFF 100%)',
      borderTop:'2px solid var(--or)',
      padding:'16px 20px 18px',
      minWidth:0, overflow:'hidden',
    }}>
      {/* Header row */}
      <div style={{display:'flex',alignItems:'flex-start',justifyContent:'space-between',flexWrap:'wrap',gap:10,marginBottom:12}}>
        <div>
          <div style={{fontSize:13,fontWeight:700,color:'var(--or)',letterSpacing:'-0.01em'}}>
            Transaction Intelligence Panel
            {o.challanNumber && <span style={{marginLeft:8,fontFamily:'var(--font)',color:'var(--txt2)',fontWeight:500,fontSize:11}}>· {o.challanNumber}</span>}
          </div>
          <div style={{fontSize:11,color:'var(--txt2)',marginTop:2}}>
            {Store.name('customers',o.customerId)||'—'} · {sdD(o.date)} · {Number(o.quantity||0).toFixed(3)} {o.uom||'MT'} · {sdC(window.gAmt(o))}
          </div>
        </div>
        <div style={{display:'flex',gap:6,alignItems:'center',flexWrap:'wrap'}}>
          <SDBadge v={o.status} size={11} />
          <SDBadge v={o.settlementStatus||'Unsettled'} size={11} />
          {(o.transportRequired||'Yes')==='No' && <SDBadge v="No Transport" size={10} />}
        </div>
      </div>

      <QuickActions />
      {activePanel === 'purchase'   && <PurchasePanel />}
      {activePanel === 'transport'  && <TransportPanel />}
      {activePanel === 'settlement' && <SettlementPanel />}
      {activePanel === 'customer'   && <CustomerPanel />}
      <TabBar />

      <div style={{minWidth:0,overflow:'hidden'}}>
        {tab==='overview'   && <TabOverview />}
        {tab==='items'      && <TabItems />}
        {tab==='logistics'  && <TabLogistics />}
        {tab==='procurement'&& <TabProcurement />}
        {tab==='timeline'   && <TabTimeline />}
        {tab==='audit'      && <TabAudit />}
      </div>
    </div>
  );
}

window.SalesDrillDown = SalesDrillDown;
