SetTitle("Title"); ?><!DOCTYPE html>
<html lang="ru">
<head>
  <meta charset="utf-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1" />
  <title>Согласие — подпись</title>
  <style>
    :root{--bg:#f7f8fc;--paper:#fff;--text:#0c1224;--muted:#6b7280;--line:#e7ecf3;--pill:#e9eff9;--shadow:0 10px 34px rgba(18,27,106,.12)}
    body{margin:0;background:var(--bg);color:var(--text);font:16px/1.5 system-ui,-apple-system,Segoe UI,Roboto,Arial,"Noto Sans",sans-serif}
    .wrap{max-width:980px;margin:0 auto;padding:28px 16px}
    .btn{border:0;border-radius:14px;background:#0d1556;color:#fff;padding:12px 18px;font-weight:700;box-shadow:var(--shadow);cursor:pointer}
    .btn.light{background:#e7ecff;color:#0d1556}
    .card{background:var(--paper);border:1px solid var(--line);border-radius:18px;box-shadow:var(--shadow)}
    .card-body{padding:18px}
    .paper{border:1px solid #cbd2e1;border-radius:16px;padding:26px;min-height:520px}
    .ph{display:inline-block;border:2px solid #ef4444;border-radius:8px;padding:2px 6px;line-height:1;margin:0 2px}
    .muted{color:#6b7280}
    .sign-row{display:flex;justify-content:space-between;margin-top:32px}
    .sign-slot{width:260px;border-bottom:1px solid #cbd5e1;height:40px;position:relative}
    .sign-slot img{position:absolute;left:0;bottom:-2px;height:36px}
    .pad{background:var(--paper);border:1px dashed #bac2d6;border-radius:16px;height:220px;touch-action:none;position:relative;margin-top:12px}
    .pad canvas{width:100%;height:100%;display:block;border-radius:16px}
    .pad .hint{position:absolute;inset:auto 16px 12px 16px;color:#8b95ad;font-size:13px;text-align:center;pointer-events:none}
    .toolbar{display:flex;gap:10px;justify-content:flex-end;margin-top:10px}
  </style>
  <!-- html2canvas для сохранения документа как изображения -->
  <script src="https://cdn.jsdelivr.net/npm/html2canvas@1.4.1/dist/html2canvas.min.js&quot;&gt;&lt;/script&gt;
</head>
<body>
  <main class="wrap">
    <h1 style="text-align:center;margin:0 0 14px">Согласие — подпись</h1>

    <div class="card card-body">
      <div class="muted" style="margin-bottom:8px">Ссылка на эту страницу можно отправить клиенту.</div>
      <article class="paper" id="doc-paper">
        <h2 style="margin:0 0 8px;text-align:center">СОГЛАСИЕ</h2>
        <p class="muted" style="text-align:center;margin:0 0 16px">на приобретение дополнительных услуг</p>

        <p>Я, <span class="ph" id="d-fio">—</span>, соглашаюсь на приобретение следующих дополнительных услуг:
           <span class="ph" id="d-service">—</span> (код EMD).</p>

        <p>К договору перевозки пассажиров и багажа рейсом ПАО «Авиакомпания «ЮТэйр».</p>

        <p>№ <span class="ph" id="d-ticket">—</span> от <span class="ph" id="d-date1">—</span> по маршруту
           <span class="ph" id="d-route">—</span>.</p>

        <p>«<span id="d-date2" class="ph">—</span>» г.</p>

        <div class="sign-row">
          <div>
            <div class="muted">подпись</div>
            <div class="sign-slot"><img id="sign-img" alt="Подпись" class="hide"></div>
          </div>
          <div style="align-self:flex-end" class="muted">(ФИО: <span id="d-fio-3">—</span>)</div>
        </div>
      </article>

      <div class="toolbar">
        <button class="btn light" id="btn-attach" type="button">Вставить подпись в документ</button>
        <button class="btn" id="btn-save" type="button">Сохранить (PNG)</button>
        <a class="btn light" id="btn-back" href="/">← На главную</a>
      </div>
    </div>

    <section class="card card-body" style="margin-top:14px">
      <h3 style="margin:0 0 10px">Подпись на экране</h3>
      <div class="pad" id="pad">
        <canvas id="canvas"></canvas>
        <div class="hint">Нарисуйте подпись пальцем/стилусом. Двойной тап — отмена последнего штриха.</div>
      </div>
      <div class="toolbar">
        <button class="btn light" id="clear" type="button">Очистить</button>
        <button class="btn light" id="attach" type="button">Вставить в документ</button>
        <button class="btn light" id="dl" type="button">Скачать PNG подписи</button>
      </div>
      <div id="result" class="muted" style="margin-top:10px"></div>
    </section>
  </main>

  <script>
    const qs = new URLSearchParams(location.search);
    const AGREEMENT_ID = qs.get('id');

    if (!AGREEMENT_ID) {
      alert('Не передан id соглашения.'); location.href = '/'; }

    // загрузка данных соглашения
    (async function load(){
      const a = await fetch(`/api/agreements/${AGREEMENT_ID}`).then(r=>r.json());
      const set = (id, val) => document.getElementById(id).textContent = val || '—';
      set('d-fio', a.fio); set('d-service', a.service); set('d-ticket', a.ticket);
      set('d-route', a.route); set('d-date1', a.dateDisplay); set('d-date2', a.dateDisplay); set('d-fio-3', a.fio);
      document.getElementById('btn-back').href = '/';
      if (a.imagePath){
        // уже подписано
        document.getElementById('result').innerHTML =
          `Уже сохранено: <a href="${a.imagePath}" download>скачать PNG</a>`;
      }
    })();

    // ===== Canvas-подпись
    const canvas = document.getElementById('canvas');
    const pad = document.getElementById('pad');
    const ctx = canvas.getContext('2d');
    const DPR = window.devicePixelRatio || 1;
    let drawing = false; const strokes = []; let lastTap = 0;

    function resize(){
      const r = pad.getBoundingClientRect();
      canvas.width = Math.floor(r.width * DPR); canvas.height = Math.floor(r.height * DPR);
      canvas.style.width = r.width + 'px'; canvas.style.height = r.height + 'px';
      ctx.setTransform(DPR,0,0,DPR,0,0); ctx.lineWidth = 2; ctx.lineCap = 'round'; ctx.lineJoin='round'; ctx.strokeStyle = '#0c1224';
      redraw();
    }
    function redraw(){ ctx.clearRect(0,0,canvas.width,canvas.height); ctx.save(); ctx.scale(DPR,DPR);
      strokes.forEach(p=>{ ctx.beginPath(); p.forEach((q,i)=>{ i?ctx.lineTo(q.x,q.y):ctx.moveTo(q.x,q.y) }); ctx.stroke(); });
      ctx.restore(); }
    function addPoint(x,y){ if(!drawing) return; strokes.at(-1).push({x,y}); redraw(); }

    canvas.addEventListener('pointerdown', e=>{ drawing=true; strokes.push([]); addPoint(e.offsetX,e.offsetY); canvas.setPointerCapture(e.pointerId); });
    canvas.addEventListener('pointermove', e=> addPoint(e.offsetX,e.offsetY));
    canvas.addEventListener('pointerup',   e=>{ drawing=false; canvas.releasePointerCapture(e.pointerId); });
    pad.addEventListener('pointerdown', e=>{ const now=Date.now(); if(now-lastTap<300){ strokes.pop(); redraw(); } lastTap=now; });
    window.addEventListener('resize', resize, {passive:true}); resize();

    document.getElementById('clear').addEventListener('click', ()=>{ strokes.length=0; redraw(); });
    document.getElementById('dl').addEventListener('click', ()=>{
      if(!strokes.length) return alert('Сначала подпишите.');
      const url = canvas.toDataURL('image/png'); const a = Object.assign(document.createElement('a'), {href:url, download:'signature.png'}); a.click();
    });

    function attachSignature(){
      if(!strokes.length){ alert('Сначала поставьте подпись.'); return false; }
      const url = canvas.toDataURL('image/png');
      const img = document.getElementById('sign-img'); img.src = url; img.classList.remove('hide');
      document.getElementById('doc-paper').scrollIntoView({behavior:'smooth'});
      return true;
    }
    document.getElementById('attach').addEventListener('click', attachSignature);
    document.getElementById('btn-attach').addEventListener('click', attachSignature);

    // ===== Сохранение: делаем скрин документа и отправляем PNG на сервер
    document.getElementById('btn-save').addEventListener('click', async ()=>{
      if (!attachSignature()) return; // если ещё не вставили
      const node = document.getElementById('doc-paper');
      const canvasDoc = await html2canvas(node, { scale: 2, useCORS: true });
      const dataUrl = canvasDoc.toDataURL('image/png');

      const res = await fetch(`/api/agreements/${AGREEMENT_ID}/final-image`, {
        method:'POST', headers:{'Content-Type':'application/json'},
        body: JSON.stringify({ image: dataUrl })
      }).then(r=>r.json());

      if (res.ok){
        document.getElementById('result').innerHTML =
          `Сохранено ✅ — <a href="${res.file}" download>скачать PNG</a>`;
      } else {
        alert('Ошибка сохранения');
      }
    });
  </script>
</body>
</html>