/* UI mockups — faithful to actual web3map dark UI */

/* A single arbitrage card (matches the real dashboard card structure) */
const ArbCard = ({ tk, kind = "CEX-DEX", from = [], to = [], bridge = false, tags = [], spread, buyPx, sellPx, buyRoute, sellRoute, tokenAddr, poolAddr, tier = "green" }) => {
  const isRed = spread < 0;
  return (
    <div style={{
      border: `1px solid ${tier === "red" ? "color-mix(in oklab, var(--down) 45%, transparent)" : "color-mix(in oklab, var(--accent) 38%, transparent)"}`,
      borderRadius: 8,
      padding: "10px 12px",
      background: "color-mix(in oklab, var(--bg-elev) 96%, transparent)",
      display: "flex",
      flexDirection: "column",
      gap: 8,
    }}>
      <div style={{display: "flex", justifyContent: "space-between", alignItems: "center", gap: 8, flexWrap: "wrap"}}>
        <div style={{display: "flex", alignItems: "center", gap: 6, flexWrap: "wrap"}}>
          <span className="mono" style={{fontWeight: 600, fontSize: 12, color: "var(--fg)"}}>{tk}</span>
          <span className="mockup-badge">{kind}</span>
          {from.map((c, i) => <span key={"f"+i} className="mockup-chain">{c}</span>)}
          <span style={{fontSize: 10, color: "var(--fg-4)"}}>—</span>
          {to.map((c, i) => <span key={"t"+i} className="mockup-chain">{c}</span>)}
          {bridge && <span className="mockup-badge red">NEEDS BRIDGE</span>}
          {tags.map((t, i) => <span key={"tg"+i} className="mockup-badge muted">{t}</span>)}
        </div>
        <span className="mono" style={{
          fontWeight: 600,
          fontSize: 13,
          color: tier === "red" ? "var(--down)" : "var(--accent-ink)",
        }}>{spread >= 0 ? "+" : ""}{spread.toFixed(2)}%</span>
      </div>

      <div style={{display: "flex", flexDirection: "column", gap: 4, paddingTop: 2}}>
        <div style={{display: "grid", gridTemplateColumns: "auto 1fr auto", gap: 8, alignItems: "center"}}>
          <span className="mono" style={{fontSize: 9.5, color: "var(--accent-ink)", fontWeight: 600, letterSpacing: "0.05em"}}>▶ BUY</span>
          <span className="mono" style={{fontSize: 10, color: "var(--fg-3)"}}>{buyRoute}</span>
          <span className="mono" style={{fontSize: 11, color: "var(--fg)", fontWeight: 500}}>${buyPx}</span>
        </div>
        <div style={{display: "grid", gridTemplateColumns: "auto 1fr auto", gap: 8, alignItems: "center"}}>
          <span className="mono" style={{fontSize: 9.5, color: "var(--down)", fontWeight: 600, letterSpacing: "0.05em"}}>▶ SELL</span>
          <span className="mono" style={{fontSize: 10, color: "var(--fg-3)"}}>{sellRoute}</span>
          <span className="mono" style={{fontSize: 11, color: "var(--fg)", fontWeight: 500}}>${sellPx}</span>
        </div>
        {tokenAddr && (
          <div className="mono" style={{fontSize: 9, color: "var(--fg-4)", paddingLeft: 40, marginTop: 2}}>
            token {tokenAddr}
          </div>
        )}
        {poolAddr && (
          <div className="mono" style={{fontSize: 9, color: "var(--fg-4)", paddingLeft: 40}}>
            pool {poolAddr}
          </div>
        )}
      </div>
    </div>
  );
};

/* 3-column column header */
const ColHeader = ({ title, count, countLabel = "assets", sub, filters }) => (
  <>
    <div style={{
      display: "flex",
      justifyContent: "space-between",
      alignItems: "baseline",
      padding: "10px 14px 6px",
      borderBottom: "1px solid var(--hairline)",
    }}>
      <div>
        <div style={{fontSize: 13, fontWeight: 600, color: "var(--fg)", letterSpacing: "-0.01em"}}>{title}</div>
        {sub && <div className="mono" style={{fontSize: 9.5, color: "var(--fg-4)", marginTop: 2}}>{sub}</div>}
      </div>
      <div className="mono" style={{fontSize: 10, color: "var(--fg-3)"}}>{count} {countLabel}</div>
    </div>
    {filters && (
      <div style={{display: "flex", gap: 4, padding: "8px 14px", borderBottom: "1px solid var(--hairline)", flexWrap: "wrap"}}>
        {filters.map((f, i) => (
          <span key={i} className={"mockup-pill " + (f.on ? "on" : "")}>{f.label}</span>
        ))}
      </div>
    )}
  </>
);

/* The Opportunities mockup — mimics actual 3-column dashboard */
const OpportunitiesMock = () => (
  <div className="mockup mockup-dark">
    <div className="mockup-chrome">
      <div className="dots"><span/><span/><span/></div>
      <div className="url">web3map.ink/arbitrage</div>
      <div style={{width: 30}}/>
    </div>
    <div style={{display: "grid", gridTemplateColumns: "140px 1fr"}}>
      {/* Sidebar */}
      <div style={{borderRight: "1px solid var(--hairline)", padding: "14px 12px", display: "flex", flexDirection: "column", gap: 16, background: "color-mix(in oklab, var(--bg-sunken) 60%, transparent)"}}>
        <div>
          <div className="mono" style={{fontSize: 9, color: "var(--fg-4)", letterSpacing: "0.08em", marginBottom: 6}}>FILTERS</div>
          <div className="mono" style={{fontSize: 10, color: "var(--fg-2)", fontWeight: 500}}>ARBITRAGE</div>
        </div>
        <div>
          <div className="mono" style={{fontSize: 9, color: "var(--fg-4)", letterSpacing: "0.08em", marginBottom: 6}}>FROM</div>
          <div style={{display: "flex", flexWrap: "wrap", gap: 3}}>
            {["UNISWAP", "CURVE", "BINANCE"].map(v => <span key={v} className="mockup-pill sm">{v}</span>)}
          </div>
        </div>
        <div>
          <div className="mono" style={{fontSize: 9, color: "var(--fg-4)", letterSpacing: "0.08em", marginBottom: 6}}>TO</div>
          <div style={{display: "flex", flexWrap: "wrap", gap: 3}}>
            {["UNISWAP", "CURVE", "BYBIT"].map(v => <span key={v} className="mockup-pill sm">{v}</span>)}
          </div>
        </div>
        <div>
          <div className="mono" style={{fontSize: 9, color: "var(--fg-4)", letterSpacing: "0.08em", marginBottom: 6}}>CHAINS</div>
          <div style={{display: "flex", flexWrap: "wrap", gap: 3}}>
            {["eth", "arb", "base", "sol", "bsc"].map(v => <span key={v} className="mockup-pill sm">{v}</span>)}
          </div>
        </div>
      </div>
      {/* Card column */}
      <div style={{display: "flex", flexDirection: "column"}}>
        <ColHeader title="Arbitrage Opportunities" count="142" countLabel="pairs" sub="USD $1,000 · spot" filters={[
          {label: "All", on: true}, {label: "Spot"}, {label: "Perp"}, {label: "CEX-DEX"}, {label: "DEX-DEX"}, {label: "BRIDGE · 1d"}
        ]}/>
        <div style={{padding: 10, display: "flex", flexDirection: "column", gap: 8, overflow: "hidden"}}>
          <ArbCard tk="ENJ" kind="CEX-DEX" from={["arb"]} to={["eth"]} bridge tags={["5Y","7d"]}
            buyRoute="BYBIT SPOT" sellRoute="UNISWAP V3 · chain eth" buyPx="0.6688" sellPx="0.6854"
            tokenAddr="0xf6296…76fb3" poolAddr="0xAf15…3d00a" spread={2.33}/>
          <ArbCard tk="SYGNA" kind="DEX-DEX" from={["base"]} to={["eth"]} tags={["1Y","3d"]}
            buyRoute="ETHENA CL · chain linea" sellRoute="UNISWAP V3 · chain avax" buyPx="0.0(5)12802" sellPx="0.0(5)13109"
            tokenAddr="0x6B3ce…44fb8" poolAddr="0x8a12…c47e5" spread={10.52}/>
          <ArbCard tk="PsETH" kind="DEX-DEX" from={["base"]} to={["blast"]} bridge tags={["+5 more"]}
            buyRoute="AERODROME V2 · chain base" sellRoute="THRUSTER V3 · chain BLAST" buyPx="2860.71" sellPx="2910.08"
            tokenAddr="0x1249…Td6ed" spread={17.19}/>
          <ArbCard tk="ZBJ" kind="CEX-DEX" from={["eth"]} to={["bsc"]} bridge tags={["5Y","1d"]}
            buyRoute="BYBIT SPOT" sellRoute="PANCAKESWAP V3 · chain BSC" buyPx="0.8174" sellPx="0.8221"
            tokenAddr="0x6f33…2aa3" spread={14.08}/>
        </div>
      </div>
    </div>
  </div>
);

/* New Entries mock — matches middle column style */
const NewEntriesMock = () => (
  <div className="mockup mockup-dark">
    <div className="mockup-chrome">
      <div className="dots"><span/><span/><span/></div>
      <div className="url">web3map.ink/arbitrage · new entries</div>
      <div style={{width: 30}}/>
    </div>
    <div>
      <ColHeader title="New Entries" count="7" countLabel="added · 21 pairs" sub="min % ≥ 5.00 · last 15m" filters={[
        {label: "All", on: true}, {label: "Spot"}, {label: "Perp"}, {label: "BRIDGE · 1d"}, {label: "Buy Route"}
      ]}/>
      <div style={{padding: 10, display: "flex", flexDirection: "column", gap: 8}}>
        <ArbCard tk="ZBJ" kind="CEX-DEX" from={["eth"]} to={["bsc"]} bridge tags={["ADDED 14s"]}
          buyRoute="BYBIT SPOT" sellRoute="PANCAKESWAP V3 · chain BSC" buyPx="0.8174" sellPx="0.8221"
          tokenAddr="0x6f33…2aa3" spread={14.08}/>
        <ArbCard tk="SYGNA" kind="DEX-DEX" from={["base"]} to={["eth"]} tags={["ADDED 48s"]}
          buyRoute="ETHENA CL · chain linea" sellRoute="UNISWAP V3 · chain avax" buyPx="0.0(5)12802" sellPx="0.0(5)13109"
          spread={10.52}/>
        <ArbCard tk="ENJ" kind="CEX-DEX" from={["arb"]} to={["eth"]} bridge tags={["ADDED 2m"]}
          buyRoute="BYBIT SPOT" sellRoute="UNISWAP V3 · chain eth" buyPx="0.6688" sellPx="0.6854"
          spread={2.33}/>
        <ArbCard tk="PsETH" kind="DEX-DEX" from={["base"]} to={["blast"]} bridge tags={["+5 more","ADDED 3m"]}
          buyRoute="SYNCSWAP V3 · chain LINEA" sellRoute="SYNCSWAP V3 · chain ZKSYNC" buyPx="2997.36" sellPx="2374.85"
          spread={14.78} tier="red"/>
      </div>
      <div style={{padding: "10px 14px", borderTop: "1px solid var(--hairline)", background: "var(--bg-sunken)"}}>
        <div className="mono" style={{fontSize: 9, color: "var(--fg-4)", letterSpacing: "0.08em"}}>
          ENTRY THRESHOLD · ≥ 5.00%   ·   ALERT · TELEGRAM · WEB
        </div>
      </div>
    </div>
  </div>
);

/* Price Spikes mock — third column style */
const PriceSpikesMock = () => (
  <div className="mockup mockup-dark">
    <div className="mockup-chrome">
      <div className="dots"><span/><span/><span/></div>
      <div className="url">web3map.ink/arbitrage · price spikes</div>
      <div style={{width: 30}}/>
    </div>
    <div>
      <ColHeader title="Price Spikes" count="5" countLabel="active" sub="30s window · ≥ 30.00%" filters={[
        {label: "30s", on: true}, {label: "1m"}, {label: "3m"}, {label: "5m"}, {label: "10m"}, {label: "15m"}, {label: "1h"}, {label: "4h"}
      ]}/>
      <div style={{padding: 10, display: "flex", flexDirection: "column", gap: 8}}>
        <SpikeRow tk="DOT" venue="UNISWAP V3 · eth" delta={-100.00} prevBuy="1.242378" nowBuy="0.0000022388" pool="0x68d466…436da6"/>
        <SpikeRow tk="MANTA" venue="UNISWAP V3 · eth" delta={-44.66} prevBuy="0.066820" nowBuy="0.034675" pool="0xec64a7…ef8a"/>
      </div>
      <div style={{padding: "10px 14px", borderTop: "1px solid var(--hairline)", background: "var(--bg-sunken)"}}>
        <div className="mono" style={{fontSize: 9, color: "var(--fg-4)", letterSpacing: "0.08em"}}>
          WINDOW · 30s  ·  THRESHOLD · ≥ 30.00%  ·  2,840 POOLS WATCHED
        </div>
      </div>
    </div>
  </div>
);

const SpikeRow = ({ tk, venue, delta, prevBuy, nowBuy, pool, sub }) => (
  <div style={{
    border: "1px solid color-mix(in oklab, var(--down) 30%, transparent)",
    borderRadius: 8,
    padding: "10px 12px",
    background: "color-mix(in oklab, var(--down) 4%, var(--bg-elev))",
    display: "flex",
    flexDirection: "column",
    gap: 6,
  }}>
    <div style={{display: "flex", justifyContent: "space-between", alignItems: "center"}}>
      <div style={{display: "flex", alignItems: "center", gap: 6, flexWrap: "wrap"}}>
        <span className="mono" style={{fontSize: 11, fontWeight: 600, color: "var(--fg)"}}>{tk}</span>
        <span className="mockup-badge red">SPIKE 30s</span>
        {sub && <span className="mockup-badge muted">{sub}</span>}
      </div>
      <span className="mono" style={{fontSize: 13, fontWeight: 600, color: "var(--down)"}}>{delta.toFixed(2)}%</span>
    </div>
    <div className="mono" style={{fontSize: 9.5, color: "var(--fg-3)"}}>{venue}</div>
    <div className="mono" style={{fontSize: 10, color: "var(--fg-3)", display: "flex", justifyContent: "space-between"}}>
      <span>prev <span style={{color: "var(--fg-2)"}}>${prevBuy}</span></span>
      <span>now <span style={{color: "var(--down)"}}>${nowBuy}</span></span>
    </div>
    <div className="mono" style={{fontSize: 9, color: "var(--fg-4)"}}>{pool}</div>
  </div>
);

Object.assign(window, { OpportunitiesMock, NewEntriesMock, PriceSpikesMock, ArbCard, SpikeRow, ColHeader });
