/* ============================================================
   Paella · Политика обработки персональных данных и управление
   своими данными. Документ обязан быть в открытом доступе
   (152-ФЗ, ст. 18.1), поэтому это обычный раздел сайта,
   доступный из подвала и из формы регистрации.
   ============================================================ */

const PRIVACY_UPDATED = "26 сентября 2026 года";
/* Реквизиты оператора: подставляются владельцем проекта перед запуском.
   Пока показываем то, что известно достоверно. */
const OPERATOR = {
  name: "Орлова Ольга Витальевна",
  site: "paellafood.ru",
  email: "privacy@paellafood.ru",
};

function PrivacySection({ n, title, children }) {
  return (
    <section style={{ marginTop: 26 }}>
      <h2 style={{ fontSize: 18, fontWeight: 800, margin: "0 0 10px" }}>{n}. {title}</h2>
      <div style={{ fontSize: 14.5, lineHeight: 1.65, color: "var(--ink-2)" }}>{children}</div>
    </section>
  );
}

function PrivacyScreen({ ctx }) {
  useEffect(() => { window.scrollTo({ top: 0 }); }, []);
  const V = typeof useVisited === "function" ? useVisited() : null;

  /* Право забрать свои данные и право их удалить — требование закона,
     поэтому это не «настройки», а кнопки рядом с самим документом. */
  const exportData = () => {
    let payload = {};
    try {
      payload = {
        выгружено: new Date().toISOString(),
        профиль: JSON.parse(localStorage.getItem("paella_user_v1") || "null"),
        сохранённые_блюда: JSON.parse(localStorage.getItem("paella_saved_v1") || "[]"),
        посещения_и_отзывы: JSON.parse(localStorage.getItem("paella_visited_v1") || "{}"),
        вкусовой_профиль: JSON.parse(localStorage.getItem("paella_taste_v1") || "null"),
        место: JSON.parse(localStorage.getItem("paella_geo_v1") || "null"),
      };
    } catch (e) {}
    const blob = new Blob([JSON.stringify(payload, null, 2)], { type: "application/json" });
    const a = document.createElement("a");
    a.href = URL.createObjectURL(blob);
    a.download = "paella-мои-данные.json";
    a.click();
    setTimeout(() => URL.revokeObjectURL(a.href), 5000);
    ctx.toast && ctx.toast("Файл с вашими данными скачан");
  };

  const wipeData = () => {
    if (!window.confirm("Удалить все ваши данные из этого браузера? Отзывы, сохранённые блюда и отметки о посещениях будут стёрты. Отменить это будет нельзя.")) return;
    try {
      Object.keys(localStorage).filter((k) => /^paella/i.test(k)).forEach((k) => localStorage.removeItem(k));
    } catch (e) {}
    ctx.toast && ctx.toast("Данные удалены. Страница перезагрузится.");
    setTimeout(() => window.location.reload(), 900);
  };

  return (
    <div className="fadein wrap" style={{ maxWidth: 820 }}>
      <div className="pintro">
        <span className="eyebrow">Документ</span>
        <h1>Политика обработки персональных данных</h1>
        <p>Действует с {PRIVACY_UPDATED}. Оператор — {OPERATOR.name}, сайт {OPERATOR.site}.</p>
      </div>

      <div className="card" style={{ padding: "20px 22px", marginTop: 8 }}>
        <p style={{ fontSize: 14.5, lineHeight: 1.65, color: "var(--ink-2)", margin: 0 }}>
          Коротко: мы собираем минимум — имя и почту при регистрации, ваши оценки блюд
          и, если вы сами разрешите, примерное местоположение, чтобы показать, сколько идти пешком.
          Мы не продаём эти данные и не передаём их рекламным сетям.
        </p>
      </div>

      <PrivacySection n={1} title="Кто обрабатывает данные">
        Оператор персональных данных — {OPERATOR.name}, владелец сайта {OPERATOR.site}.
        Вопросы об обработке данных, отзыв согласия и удаление аккаунта — по адресу{" "}
        <a href={"mailto:" + OPERATOR.email} style={{ color: "var(--olive)", fontWeight: 700 }}>{OPERATOR.email}</a>.
      </PrivacySection>

      <PrivacySection n={2} title="Какие данные собираются">
        <ul style={{ margin: "6px 0 0", paddingLeft: 20, display: "flex", flexDirection: "column", gap: 6 }}>
          <li><b>При регистрации:</b> имя, адрес электронной почты или номер телефона. Пароль хранится только в виде необратимого хэша — сам пароль мы не видим и не храним.</li>
          <li><b>При использовании сайта:</b> оценки блюд, тексты отзывов, отметки о посещённых заведениях, сохранённые блюда.</li>
          <li><b>Фотографии,</b> которые вы прикладываете к отзывам. Не публикуйте снимки, на которых видны посторонние люди, без их согласия.</li>
          <li><b>Местоположение</b> — только если вы сами нажали «Определить моё место» или указали адрес. Точные координаты не сохраняются на сервере.</li>
          <li><b>Технические данные:</b> IP-адрес, тип устройства и браузера, страницы, которые вы открывали. Собираются обезличенной статистикой посещаемости.</li>
        </ul>
      </PrivacySection>

      <PrivacySection n={3} title="Зачем они нужны">
        Чтобы вы могли войти в свой профиль с любого устройства; чтобы подбор блюд учитывал ваш вкус;
        чтобы показать расстояние до заведения; чтобы ваши отзывы видели другие гости и подбор становился
        точнее для всех. Рекламных рассылок без вашего отдельного согласия не будет.
      </PrivacySection>

      <PrivacySection n={4} title="Основание обработки">
        Ваше согласие, которое вы даёте, отмечая соответствующее поле при регистрации (ст. 6 ч. 1 п. 1
        Федерального закона № 152-ФЗ «О персональных данных»). Согласие добровольное: пользоваться
        сайтом без регистрации можно, часть возможностей при этом будет недоступна.
      </PrivacySection>

      <PrivacySection n={5} title="Как долго хранятся данные">
        Пока существует ваш аккаунт. После удаления аккаунта профиль и отзывы удаляются в течение
        30 дней. Отзывы, уже учтённые в общем балле блюда, остаются в обезличенном виде — без имени
        и без связи с вами.
      </PrivacySection>

      <PrivacySection n={6} title="Кому передаются данные">
        Мы не продаём и не передаём персональные данные третьим лицам для рекламы. Данные
        обрабатываются на технических площадках, обеспечивающих работу сайта и статистику
        посещаемости. Государственным органам данные передаются только по законному требованию.
      </PrivacySection>

      <PrivacySection n={7} title="Ваши права">
        Вы вправе в любой момент: получить сведения об обработке своих данных, потребовать их
        уточнения или удаления, отозвать согласие. Отзыв согласия означает удаление аккаунта.
        Скачать свои данные или удалить их можно прямо здесь, кнопками ниже, либо написав нам
        на {OPERATOR.email}.
      </PrivacySection>

      <PrivacySection n={8} title="Файлы cookie и статистика">
        Сайт использует хранилище браузера, чтобы помнить ваш выбор — тёмную тему, сохранённые
        блюда, указанное место. Эти сведения остаются в вашем браузере. Обезличенная статистика
        посещаемости помогает понять, какими разделами пользуются. От необязательной статистики
        можно отказаться в баннере при первом визите.
      </PrivacySection>

      <PrivacySection n={9} title="Изменения">
        Новая редакция публикуется на этой странице с указанием даты. Существенные изменения мы
        покажем отдельным уведомлением на сайте.
      </PrivacySection>

      <section className="card" style={{ marginTop: 28, padding: "20px 22px" }}>
        <h2 style={{ fontSize: 17, fontWeight: 800, margin: "0 0 6px" }}>Управление вашими данными</h2>
        <p style={{ fontSize: 13.5, color: "var(--ink-2)", margin: "0 0 14px", lineHeight: 1.55 }}>
          Выгрузка соберёт всё, что хранится о вас в этом браузере, в один файл. Удаление сотрёт
          отзывы, закладки и отметки о посещениях без возможности восстановить.
        </p>
        <div className="row" style={{ gap: 10, flexWrap: "wrap" }}>
          <button className="btn btn-soft btn-sm" onClick={exportData}>
            <Icon name="arrowDown" size={15} />Скачать мои данные
          </button>
          <button className="btn btn-sm" style={{ background: "var(--tomato-soft)", color: "var(--tomato-ink)", fontWeight: 700 }} onClick={wipeData}>
            <Icon name="x" size={15} />Удалить мои данные
          </button>
        </div>
        {V && (
          <p className="muted" style={{ fontSize: 12.5, marginTop: 12 }}>
            Сейчас хранится: отметок о посещениях — {V.count()}, отзывов — {V.reviewCount()}.
          </p>
        )}
      </section>
    </div>
  );
}

Object.assign(window, { PrivacyScreen });
