// ============================================================
// Left TOC + Right sidebar panels — vlastní směnka „bez protestu"
// § 75 zákona č. 191/1950 Sb., zákon směnečný a šekový (ZSŠ)
// ============================================================

const TOC_ITEMS = [
  { id: 'art-header',   num: '1',     title: 'Údaje o vystavení' },
  { id: 'art-body',     num: '2 – 4', title: 'Směnečný text' },
  { id: 'art-vystavce', num: '5',     title: 'Výstavce směnky' },
  { id: 'art-veritel',  num: '6',     title: 'Věřitel (remitent)' },
  { id: 'art-dolozka',  num: '—',     title: 'Doložka — rozhodčí' },
  { id: 'art-aval',     num: '8',     title: 'Rukojmí (volitelně)' },
];

const TOC = ({ active, setActive }) => (
  <aside className="toc" aria-label="Obsah směnky">
    <div className="toc-title">Obsah směnky</div>
    <ol>
      {TOC_ITEMS.map(item => (
        <li key={item.id}>
          <a
            href={`#${item.id}`}
            className={active === item.id ? 'active' : ''}
            onClick={() => setActive(item.id)}
          >
            <span className="toc-num">{item.num}</span>
            <span>{item.title}</span>
          </a>
        </li>
      ))}
    </ol>
    <div className="toc-divider"></div>
    <div className="toc-meta">
      <div><strong>Poslední aktualizace</strong><br />{new Date().toLocaleDateString('cs-CZ', { day: 'numeric', month: 'numeric', year: 'numeric' })}</div>
      <div><strong>Autor</strong><br />JUDr. Milan Ficek</div>
      <div><strong>Editorial review</strong><br />JUDr. Milan Ficek, ev. č. 50245 ČAK</div>
    </div>
  </aside>
);

window.TOC = TOC;
window.TOC_ITEMS = TOC_ITEMS;


// ---------- Tips advokáta pro směnku ----------
const Tips = ({ activeArticle, activeTipKey }) => {
  const TIPS = {
    'art-header': {
      head: 'Tip advokáta · Údaje o vystavení',
      body: <><strong>Místo vystavení</strong> a <strong>datum vystavení</strong> jsou povinné náležitosti podle § 75 bod 6 ZSŠ. Bez nich listina <strong>neplatí jako směnka</strong> (§ 76 ZSŠ). Datum se v dokumentu vypisuje slovem („15. května 2026") — typografická konvence směnečné praxe.</>,
      cite: '§ 75 bod 6, § 76 ZSŠ',
    },
    'art-body': {
      head: 'Tip advokáta · Směnečný text',
      body: <>Tělo směnky musí obsahovat <strong>bezpodmínečný slib zaplatit</strong> určitou peněžní sumu (§ 75 bod 2 ZSŠ). Doložka <strong>„BEZ PROTESTU"</strong> podle § 46 ZSŠ zprošťuje majitele povinnosti dát si protestovat směnku — vymáhání se zrychluje o týdny (přímo směnečný platební rozkaz podle § 175 OSŘ).</>,
      cite: '§ 75 bod 2, § 46 ZSŠ; § 175 OSŘ',
    },
    'art-vystavce': {
      head: 'Tip advokáta · Výstavce směnky',
      body: <><strong>Výstavce vlastní směnky je zároveň jejím dlužníkem</strong> (§ 75 ZSŠ). Vyplňte úplné identifikační údaje. <strong>Podpis výstavce</strong> je sedmá náležitost § 75 ZSŠ — bez něj listina neplatí jako směnka. Při právnické osobě uveďte osobu oprávněnou jednat dle aktuálního výpisu z OR.</>,
      cite: '§ 75 bod 7 ZSŠ',
    },
    'art-veritel': {
      head: 'Tip advokáta · Věřitel (remitent)',
      body: <>Remitent je osoba, „<strong>komu nebo na jejíž řad má být placeno</strong>" (§ 75 bod 5 ZSŠ). Identifikujte ho jednoznačně — nestačí pouze křestní jméno. Při právnické osobě uveďte název podle obchodního rejstříku a IČ.</>,
      cite: '§ 75 bod 5 ZSŠ; ÚS ČR sp. zn. III. ÚS 1996/13',
    },
    'art-dolozka': {
      head: 'Tip advokáta · Rozhodčí doložka',
      body: <>Doložka je <strong>samostatnou dohodou</strong> uzavřenou současně s vystavením směnky (NS ČR sp. zn. 29 Cdo 1099/2003). Je proto vizuálně oddělena od těla směnky vodorovnou čarou — tělo směnky podle § 75 ZSŠ tak zůstává <strong>čisté</strong> od vedlejších dojednání. Rozhodce je určen jménem (§ 7 ZRŘ).</>,
      cite: '§ 3, § 7, § 19, § 30 ZRŘ; NS ČR 29 Cdo 1099/2003',
    },
    'art-aval': {
      head: 'Tip advokáta · Rukojmí (per aval)',
      body: <>Směnečné rukojemství podle <strong>§ 30 – § 32 ZSŠ</strong>. Rukojmí je zavázán „jako ten, za koho se zaručil" (§ 32 ZSŠ) — odpovídá <strong>solidárně</strong> s výstavcem. Závazek rukojmího je platný i tehdy, je-li závazek hlavní neplatný z jiného důvodu než pro vadu formy. Slovní označení „per aval" nebo „jako rukojmí" plus podpis.</>,
      cite: '§ 30, § 31, § 32 ZSŠ',
    },

    // Bodové TIPy
    'header.misto': {
      head: 'Tip advokáta · Místo vystavení',
      body: <>Místo vystavení je povinná náležitost (§ 75 bod 6 ZSŠ). Není-li uvedeno, platí místo udané u jména výstavcova (§ 76 odst. 3 ZSŠ) — ale pro jednoznačnost vždy doplňte konkrétní město.</>,
      cite: '§ 75 bod 6, § 76 odst. 3 ZSŠ',
    },
    'header.datum': {
      head: 'Tip advokáta · Datum vystavení',
      body: <>Datum musí být <strong>určité a jednoznačné</strong>. NS ČR sp. zn. 29 Cdo 1185/2013 — chybějící nebo nesprávně uvedené datum splatnosti činí listinu neplatnou jako směnku. Datum se v dokumentu vypisuje slovem („15. května 2026") — pole automaticky převádí ISO datum na český slovní tvar.</>,
      cite: '§ 75 bod 6 ZSŠ; NS ČR 29 Cdo 1185/2013',
    },
    'body.text': {
      head: 'Tip advokáta · Směnečný text (§ 75 ZSŠ)',
      body: <>
        Toto je <strong>jádro směnky</strong>. Obsahuje současně tyto náležitosti § 75 ZSŠ:
        <br/>• <strong>bezpodmínečný slib zaplatit</strong> (bod 2),
        <br/>• údaj <strong>splatnosti</strong> (bod 3),
        <br/>• <strong>místo placení</strong> (bod 4),
        <br/>• <strong>jméno remitenta</strong> (bod 5).
        <br/><br/>Doložka <strong>„BEZ PROTESTU"</strong> (§ 46 ZSŠ) zprošťuje majitele povinnosti notářského protestu — vymáhání směnky probíhá přímo směnečným platebním rozkazem (§ 175 OSŘ).
        <br/><br/><em>Anti-pattern:</em> nepřidávejte do tohoto textu žádné podmínky („zaplatím, pokud..."), odkazy na jinou smlouvu ani vedlejší dojednání. Jakékoli oslabení bezpodmínečnosti slibu může způsobit <strong>neplatnost listiny jako směnky</strong> (§ 76 ZSŠ; NS ČR 29 Cdo 5293/2014).
      </>,
      cite: '§ 75 body 2-5, § 46, § 76 ZSŠ; § 175 OSŘ; NS ČR 29 Cdo 5293/2014',
    },
    'vystavce': {
      head: 'Tip advokáta · Výstavce',
      body: <>Při <strong>fyzické osobě</strong> uveďte úplné jméno, datum narození, bydliště a občanství. Při <strong>právnické osobě</strong> název podle OR, IČ, sídlo a osobu oprávněnou jednat. Při <strong>FO podnikateli</strong> obchodní firmu, IČ a sídlo. Identifikace musí být tak jednoznačná, aby ji bylo možné v případě sporu prokázat (§ 75 bod 7 ZSŠ).</>,
      cite: '§ 75 bod 7 ZSŠ',
    },
    'veritel': {
      head: 'Tip advokáta · Věřitel (remitent)',
      body: <>Stejné pravidlo identifikace jako u výstavce — bez uvedení remitenta směnka neplatí (§ 75 bod 5 ZSŠ). <strong>Pozor na spotřebitelské vztahy:</strong> § 18 zák. č. 257/2016 Sb. zakazuje použití směnky věřitelem-podnikatelem ke splnění povinnosti spotřebitele — tento vzor pro takovou situaci <strong>není vhodný</strong>.</>,
      cite: '§ 75 bod 5 ZSŠ; § 18 zák. č. 257/2016 Sb.',
    },
    'dolozka': {
      head: 'Tip advokáta · Doložka — dohoda smluvních stran',
      body: <>
        <strong>Doložka je samostatnou rozhodčí smlouvou</strong> uzavřenou současně s vystavením směnky. Vizuálně oddělena vodorovnou čarou pod podpisem výstavce — tato koncepce vychází ze závěrů NS ČR sp. zn. 29 Cdo 1099/2003 a zachovává čistotu směnečného textu podle § 75 ZSŠ.
        <br/><br/>Rozhodce je určen <strong>jménem</strong> (JUDr. Milan Ficek, ev. č. 50245 ČAK) — splňuje § 3 a § 7 ZRŘ. <strong>Klíčová výhoda:</strong> rozhodčí nález je přímo exekučním titulem (§ 28 odst. 2 zák. č. 216/1994 Sb. + § 274 odst. 1 písm. i) OSŘ). Po nabytí právní moci může majitel směnky <strong>okamžitě podat návrh na exekuci</strong> u soudního exekutora — bez nutnosti dalšího nalézacího řízení.
      </>,
      cite: '§ 3, § 7, § 19, § 28, § 30 zák. č. 216/1994 Sb. (ZRŘ); § 274 OSŘ; NS ČR 29 Cdo 1099/2003',
    },
    'aval': {
      head: 'Tip advokáta · Rukojmí (per aval)',
      body: <>
        <strong>Směnečné rukojemství</strong> (§ 30 – § 32 ZSŠ) je nejjistější forma zajištění směnky. Rukojmí je zavázán <strong>jako ten</strong>, za koho se zaručil — věřitel může požadovat zaplacení od kohokoli z nich, bez nutnosti nejprve vymáhat od výstavce. Slovní označení může znít „<strong>per aval</strong>" nebo „<strong>jako rukojmí</strong>" — obě varianty jsou ekvivalentní (§ 31 odst. 1 ZSŠ).
        <br/><br/>Závazek rukojmího je <strong>platný i tehdy</strong>, je-li závazek hlavní neplatný z jiného důvodu než pro <em>vadu formy</em> (§ 32 odst. 2 ZSŠ).
      </>,
      cite: '§ 30, § 31, § 32 ZSŠ',
    },
  };

  const tipKey = (activeTipKey && TIPS[activeTipKey]) ? activeTipKey
                : (activeArticle && TIPS[activeArticle]) ? activeArticle
                : 'art-body';
  const tip = TIPS[tipKey];
  if (!tip) return null;
  return (
    <div className="tip-box no-copy">
      <div className="tip-author">
        <div className="tip-author-img">
          <img src="/assets/milan-ficek.jpg" alt="JUDr. Milan Ficek" loading="lazy" decoding="async" />
        </div>
        <div className="tip-author-meta">
          <div className="tip-author-name">JUDr. Milan Ficek</div>
          <div className="tip-author-role">Advokát · ev. č. 50245 ČAK</div>
        </div>
      </div>
      <div className="tip-head">
        <span className="pilcrow">§</span>
        <span>{tip.head}</span>
      </div>
      <p className="tip-body">{tip.body}</p>
      {tip.cite && <div className="tip-cite">Zdroj: {tip.cite}</div>}
    </div>
  );
};


window.POINT_TIP_KEYS = [
  'header.misto', 'header.datum',
  'body.text',
  'vystavce',
  'veritel',
  'dolozka',
  'aval',
];

const RightSidebar = ({ activeArticle, activeTipKey, clearTipKey }) => {
  return (
    <aside className="sidebar-r" aria-label="Pomocník a vymáhání směnky">
      <Tips activeArticle={activeArticle} activeTipKey={activeTipKey} clearTipKey={clearTipKey} />

      <div className="panel sidebar-help-cta">
        <div className="panel-head"><span>Dlužník nezaplatil směnku?</span></div>
        <p style={{ margin: '0 0 14px', fontSize: 13, lineHeight: 1.55, color: 'var(--ink-2)' }}>
          Směnka je nejrychlejší způsob vymáhání pohledávky. Po splatnosti můžete přímo podat návrh na <strong>směnečný platební rozkaz</strong> (§ 175 OSŘ) — soud rozhodne během dní. Pomůžeme vám i s případným <strong>rozhodčím řízením</strong>.
        </p>
        <a
          href="https://www.rrcr.cz"
          target="_blank"
          rel="noopener noreferrer"
          className="btn btn-oxblood"
          style={{ display: 'block', textAlign: 'center', textDecoration: 'none', padding: '11px 16px', fontSize: 14 }}
        >
          Kontaktovat rozhodce
        </a>
        <p style={{ margin: '10px 0 0', fontSize: 11, color: 'var(--ink-3)', textAlign: 'center', fontStyle: 'italic' }}>
          rrcr.cz · JUDr. Milan Ficek, advokát<br/>ev. č. 50245 ČAK
        </p>
      </div>
    </aside>
  );
};

window.RightSidebar = RightSidebar;
window.Tips = Tips;

const TipModal = ({ tipKey, onClose }) => {
  React.useEffect(() => {
    if (!tipKey) return;
    const onKey = (e) => { if (e.key === 'Escape') onClose(); };
    window.addEventListener('keydown', onKey);
    return () => window.removeEventListener('keydown', onKey);
  }, [tipKey, onClose]);

  if (!tipKey) return null;

  return (
    <div className="tip-modal no-copy" role="dialog" aria-modal="true" aria-label="Tip advokáta">
      <div className="tip-modal-overlay" onClick={onClose} />
      <div className="tip-modal-sheet">
        <button type="button" className="tip-modal-close" onClick={onClose} aria-label="Zavřít tip">×</button>
        <Tips activeArticle={null} activeTipKey={tipKey} clearTipKey={onClose} />
      </div>
    </div>
  );
};

window.TipModal = TipModal;
