/* IMACX — Legal & support pages.
   Original IMACX content (PT-PT), in the house editorial voice. Covers the same
   ground a B2B gifts store needs: apoio ao cliente, termos, avisos legais,
   privacidade, cookies + a sitemap. Not copied from any third party. */

const IMACX_TEL = "+351 210 000 000";
const IMACX_MAIL = "ola@imacx.pt";
const IMACX_PRIV = "privacidade@imacx.pt";

const LEGAL_DOCS = {
  apoio: {
    kicker: "Apoio ao cliente",
    title: <>Estamos ao seu lado, <span className="o">do briefing à entrega</span>.</>,
    lead: "Comprar um brinde corporativo personalizado não é como comprar online qualquer outra coisa: há logótipos, técnicas de marcação, prazos e amostras pelo meio. Por isso o nosso processo é acompanhado por pessoas — não por um botão de “comprar”.",
    updated: "Atualizado em junho de 2026",
    sections: [
      { h: "Como funciona um pedido", body: [
        "Do primeiro contacto à caixa entregue, é assim que trabalhamos consigo:",
        { ol: [
          "Escolhe o produto no catálogo IMACX, ou diz-nos o que procura — nós sugerimos.",
          "Na ficha de produto calcula o preço estimado com a marcação que pretende. As técnicas e áreas de marcação variam consoante o artigo.",
          "Pede orçamento e deixa-nos os seus dados. Respondemos em menos de 24 horas úteis.",
          "Recebe por email a proposta e, se nos enviar o logótipo, uma amostra virtual para perceber como vai ficar.",
          "Aceite a proposta, enviamos a confirmação e a prova de impressão final (virtual) com a sua marca aplicada.",
          "Com a prova aprovada por si, entra em produção.",
          "Recebe a encomenda no prazo indicado na proposta — tipicamente 10 a 15 dias úteis após aprovação da prova.",
          "No envio, recebe email com o número de seguimento para acompanhar a entrega.",
          "Qualquer questão durante o processo, fala connosco por email ou telefone — tratamos dela.",
        ]},
        { note: "Prefere falar com alguém? Ligue e damos-lhe preço, prazos e ideias para a sua campanha sem compromisso." },
      ]},
      { h: "Amostra virtual", body: [
        "A amostra virtual não é uma peça física, mas mostra-lhe em que posição e a que tamanho fica o seu logótipo. Sempre que pede orçamento, pedimos-lhe a marca para a incluir na proposta.",
        "Colocamos o logótipo na área de marcação mais comum do produto. Se quiser noutra posição, é só dizer — enviamos uma nova amostra com a alteração, e repetimos até ficar como pretende.",
      ]},
      { h: "Entrega e pós-venda", body: [
        "O prazo estimado depende do produto, da quantidade e da complexidade da personalização. Indicamos sempre o prazo na proposta, antes de avançar.",
        "Precisa para uma data concreta? Fale connosco sobre o serviço expresso — em muitos casos conseguimos reduzir o prazo de forma significativa.",
        "Após a entrega, confirme em até 7 dias que o material está conforme. Se algo não corresponder ao acordado, contacte-nos e resolvemos.",
      ]},
      { h: "Cancelamentos e devoluções", body: [
        "Como os artigos são personalizados à medida, um pedido só pode ser cancelado antes de entrar em produção. A partir do momento em que aprova a prova de impressão, a produção arranca e não é possível cancelar.",
        "Se o produto chegar com defeito ou não corresponder ao que foi acordado, substituímos as unidades afetadas. O direito de livre resolução não se aplica a produtos feitos por medida, nos termos da lei aplicável.",
      ]},
      { h: "Formas de pagamento", body: [
        "Trabalhamos com três métodos: transferência bancária (o mais comum entre empresas), cartão de crédito/débito e Multibanco por referência.",
        "Indique a forma preferida ao confirmar o pedido. Na transferência, o processamento arranca quando o montante estiver disponível. Conforme o valor da encomenda, é possível fasear o pagamento por transferência — fale connosco.",
      ]},
      { h: "Amostras de produto", body: [
        "Quer ver e tocar antes de decidir? Temos amostras sem personalização para empresas interessadas. Peça por email, indicando o produto.",
        "Na maioria dos casos as amostras são gratuitas. Pedidos de várias amostras ou de artigos de valor mais elevado podem ter custo — informamos sempre antes de enviar.",
      ]},
      { h: "Falar connosco", body: [
        { contact: true },
      ]},
    ],
  },

  termos: {
    kicker: "Termos e condições",
    title: <>Termos e <span className="o">condições</span>.</>,
    lead: "As condições que regulam a navegação no site IMACX® e a contratação dos nossos serviços de brindes corporativos personalizados. Ao navegar e ao validar um pedido, aceita estas condições.",
    updated: "Em vigor desde junho de 2026",
    sections: [
      { h: "01 · Quem somos", body: [
        "Este site é propriedade da IMACX®, com sede em Lisboa, Portugal, dedicada à criação, produção e acompanhamento de brindes corporativos personalizados. Pode contactar-nos por email ou telefone, em português, de segunda a sexta, das 9:00 às 18:00 (hora de Portugal continental).",
      ]},
      { h: "02 · Produtos", body: [
        "Todos os produtos são personalizados de acordo com as especificações de cada cliente e estão sujeitos a disponibilidade e à aceitação do pedido pela IMACX. Procuramos descrever e ilustrar cores e materiais com o máximo rigor, mas não garantimos correspondência exata entre as cores apresentadas no ecrã e o produto final.",
        "Promoções, ofertas e descontos são válidos até à data indicada em cada caso ou até esgotar.",
      ]},
      { h: "03 · Procedimento de compra", body: [
        { h: "Pedido" },
        "Nenhum pedido se considera aceite até confirmação expressa da IMACX. Reservamo-nos o direito de recusar um pedido; se já tiver havido cobrança, o valor é devolvido na totalidade.",
        "Ao personalizar com logótipo ou imagem, o cliente compromete-se a fornecer material em formato reproduzível e de qualidade adequada. Verificamos cada pedido e podemos adaptar o desenho quando o processo de marcação o exija, enviando sempre uma prova final para aprovação.",
        "Podem existir ligeiras diferenças entre a prova e o produto impresso, dentro de uma tolerância reconhecida de cerca de 5% em dimensões, peso, quantidade e gramagem, sem que tal constitua defeito.",
        { h: "Preços e moeda" },
        "Os preços apresentam-se em euros e não incluem IVA nem portes, que são acrescentados ao total. O cliente é responsável por garantir que os dados de pagamento são válidos e que existem fundos suficientes.",
        { h: "Entrega" },
        "Os prazos indicados são estimativas de boa-fé e não são essenciais ao contrato. Podemos efetuar entregas faseadas; nesse caso, cada entrega constitui um fornecimento autónomo.",
      ]},
      { h: "04 · Desistência e devoluções", body: [
        "Por se tratar de produtos personalizados feitos à medida, não é possível desistir, alterar ou devolver após a aceitação do pedido, sem prejuízo dos direitos reconhecidos por lei ao consumidor.",
        "Produtos sem personalização podem ser devolvidos em 14 dias a contar da receção; os custos de transporte e devolução ficam a cargo do cliente.",
      ]},
      { h: "05 · Produtos com defeito", body: [
        "Verifique a encomenda no momento da entrega. Se detetar um defeito ou um pedido incompleto, contacte-nos de imediato indicando o número de pedido e, se possível, uma fotografia. Analisamos o caso e, tendo direito, procedemos à substituição com a maior brevidade.",
      ]},
      { h: "06 · Força maior", body: [
        "A IMACX não é responsável por incumprimentos resultantes de circunstâncias fora do seu controlo razoável — falhas de transporte ou de fornecedores, interrupções de energia ou de matérias-primas, medidas administrativas, entre outras.",
      ]},
      { h: "07 · Responsabilidade", body: [
        "Salvo disposição expressa em contrário, a responsabilidade da IMACX relativa a qualquer produto limita-se ao respetivo preço de compra.",
      ]},
      { h: "08 · Propriedade intelectual", body: [
        "O cliente declara ser titular dos direitos sobre os logótipos e imagens usados na personalização, ou ter autorização para o efeito, e responde por qualquer reclamação de terceiros decorrente do seu uso.",
      ]},
      { h: "09 · Lei aplicável", body: [
        "Estas condições regem-se pela lei portuguesa. Qualquer litígio será submetido aos tribunais competentes de Lisboa, sem prejuízo dos direitos que assistam ao consumidor.",
      ]},
    ],
  },

  avisos: {
    kicker: "Avisos legais",
    title: <>Avisos <span className="o">legais</span>.</>,
    lead: "Informação sobre o titular deste site e as condições de utilização, ao abrigo da legislação portuguesa e europeia aplicável ao comércio eletrónico.",
    updated: "Atualizado em junho de 2026",
    sections: [
      { h: "Titular do site", body: [
        { dl: [
          ["Denominação", "IMACX®"],
          ["Atividade", "Brindes corporativos personalizados"],
          ["Sede", "Lisboa, Portugal"],
          ["Email", IMACX_MAIL],
          ["Telefone", IMACX_TEL],
        ]},
      ]},
      { h: "Utilizadores", body: [
        "O acesso e a utilização deste site conferem a condição de utilizador e implicam a aceitação das presentes condições de uso, sem prejuízo das condições de contratação aplicáveis a cada pedido.",
      ]},
      { h: "Uso do site", body: [
        "O utilizador compromete-se a usar os conteúdos de forma adequada e a não os utilizar para:",
        { list: [
          "atividades ilícitas ou contrárias à boa-fé e à ordem pública;",
          "difundir conteúdos discriminatórios, ofensivos ou que atentem contra direitos de terceiros;",
          "introduzir vírus ou causar danos aos sistemas da IMACX, dos seus fornecedores ou de terceiros;",
          "aceder indevidamente a contas ou dados de outros utilizadores.",
        ]},
      ]},
      { h: "Propriedade intelectual e industrial", body: [
        "A IMACX é titular dos direitos de propriedade intelectual e industrial do site e dos seus elementos — imagens, textos, marcas, logótipos, estrutura, design e software. É permitida a visualização e a cópia para uso pessoal e privado; está vedada a reprodução, distribuição ou comunicação pública para fins comerciais sem autorização.",
      ]},
      { h: "Exclusão de garantias e responsabilidade", body: [
        "Adotamos as medidas técnicas adequadas, mas não respondemos por danos resultantes de erros ou omissões nos conteúdos, indisponibilidade do site ou presença de elementos nocivos alheios ao nosso controlo.",
      ]},
      { h: "Ligações externas", body: [
        "Se o site incluir ligações para sites de terceiros, a IMACX não controla esses conteúdos nem assume responsabilidade pela sua disponibilidade ou exatidão. A presença de ligações não implica qualquer associação com as entidades ligadas.",
      ]},
      { h: "Canal de denúncias", body: [
        "Mantemos um ambiente ético e seguro para colaboradores, parceiros e terceiros. Qualquer conduta irregular — fraude, corrupção, violação de direitos ou de políticas internas — pode ser comunicada de forma confidencial para " + IMACX_MAIL + ". Garantimos a proteção do denunciante de boa-fé contra qualquer retaliação.",
      ]},
      { h: "Modificações e legislação aplicável", body: [
        "A IMACX pode modificar estas condições, publicando-as devidamente. A relação com o utilizador rege-se pela lei portuguesa, sendo competentes os tribunais de Lisboa.",
      ]},
    ],
  },

  privacidade: {
    kicker: "Política de privacidade",
    title: <>A sua privacidade, <span className="o">a sério</span>.</>,
    lead: "A transparência é a base da confiança. Aqui explicamos que dados pessoais recolhemos, para quê, com que fundamento e que direitos pode exercer, ao abrigo do RGPD e da legislação portuguesa.",
    updated: "Atualizado em junho de 2026",
    sections: [
      { h: "O nosso compromisso", body: [
        { list: [
          "Tratar os dados pessoais apenas com o seu consentimento e para finalidades legítimas.",
          "Recolher somente os dados estritamente necessários ao serviço solicitado.",
          "Guardar os dados de forma segura e confidencial, com medidas técnicas e organizativas adequadas.",
          "Não usar os dados para finalidades não consentidas nem partilhá-los, salvo quando necessário à prestação do serviço ou por obrigação legal.",
        ]},
      ]},
      { h: "Responsável pelo tratamento", body: [
        { dl: [
          ["Responsável", "IMACX®"],
          ["Sede", "Lisboa, Portugal"],
          ["Contacto de privacidade", IMACX_PRIV],
        ]},
      ]},
      { h: "Que dados recolhemos e para quê", body: [
        "Recolhemos dados que nos fornece voluntariamente através dos formulários e contactos do site, para finalidades concretas:",
        { list: [
          "Pedidos de orçamento e informação — para responder e gerir o seu pedido (nome, empresa, email, telefone e os elementos da consulta).",
          "Newsletter — para enviar comunicações que subscreveu (email).",
          "Candidaturas — para gerir CVs recebidos.",
          "Conta de utilizador — para autenticação e acesso (nome de utilizador e palavra-passe).",
        ]},
      ]},
      { h: "Fundamento legal", body: [
        "A base de licitude do tratamento é, em regra, o seu consentimento e a execução do contrato ou diligências pré-contratuais que solicita. Pode retirar o consentimento a qualquer momento, sem afetar a licitude do tratamento anterior.",
      ]},
      { h: "Os seus direitos", body: [
        "Pode exercer, a qualquer momento, os direitos de acesso, retificação, oposição, apagamento, portabilidade e limitação do tratamento, mediante comunicação escrita e identificação, para " + IMACX_PRIV + ".",
        "Tem ainda o direito de apresentar reclamação junto da autoridade de controlo competente — em Portugal, a CNPD (Comissão Nacional de Proteção de Dados).",
      ]},
      { h: "Conservação e segurança", body: [
        "Conservamos os dados apenas pelo tempo necessário a cada finalidade e enquanto não solicitar a sua eliminação, findos os quais poderão ser bloqueados durante o prazo legal de prescrição de eventuais responsabilidades. Adotamos medidas adequadas contra o acesso não autorizado, a perda ou a destruição dos dados.",
        "Não estão previstas transferências internacionais de dados fora do Espaço Económico Europeu.",
      ]},
    ],
  },

  cookies: {
    kicker: "Política de cookies",
    title: <>Política de <span className="o">cookies</span>.</>,
    lead: "Este site usa cookies e tecnologias semelhantes para funcionar, recordar preferências e perceber como é utilizado. Aqui explicamos quais e como os pode gerir.",
    updated: "Atualizado em junho de 2026",
    sections: [
      { h: "O que é um cookie", body: [
        "Um cookie é um pequeno ficheiro que o site guarda no seu dispositivo quando navega. Serve para reconhecer o utilizador, recordar preferências ou recolher informação sobre os hábitos de navegação.",
      ]},
      { h: "Tipos de cookies", body: [
        { h: "Segundo quem os gere" },
        "Próprios (geridos pela IMACX) e de terceiros (geridos por outras entidades, como ferramentas de análise).",
        { h: "Segundo a duração" },
        "De sessão (apenas durante a visita) e persistentes (mantêm-se durante um período definido).",
        { h: "Segundo a finalidade" },
        "Técnicos (essenciais ao funcionamento), de personalização (recordam idioma e preferências), de análise (medem a utilização do site) e publicitários (gerem espaços de publicidade).",
      ]},
      { h: "Cookies utilizados neste site", body: [
        { table: {
          head: ["Nome", "Tipo", "Duração", "Finalidade", "Origem"],
          rows: [
            ["imacx_prefs", "Personalização", "Persistente", "Recordar preferências e formulários", "Próprio"],
            ["imacx_session", "Técnico", "Sessão", "Manter a sessão e o orçamento", "Próprio"],
            ["_analytics", "Análise", "Persistente", "Medir visitas e sessões", "Terceiro"],
          ],
        }},
      ]},
      { h: "Como desativar ou bloquear cookies", body: [
        "Pode permitir, bloquear ou eliminar cookies nas definições do seu navegador. Se bloquear cookies, algumas funcionalidades do site poderão deixar de funcionar e a experiência ser menos completa.",
        "Os principais navegadores — Chrome, Firefox, Safari, Edge e Opera — disponibilizam instruções próprias para gerir cookies nas respetivas páginas de ajuda.",
      ]},
      { h: "Os seus direitos", body: [
        "Tem os mesmos direitos de proteção de dados descritos na nossa Política de Privacidade, que pode exercer para " + IMACX_PRIV + ".",
      ]},
    ],
  },
};

const LEGAL_ROUTE = {
  "Sobre nós": "about",
  "Apoio ao cliente": "apoio",
  "Termos e condições": "termos",
  "Avisos legais": "avisos",
  "Política de privacidade": "privacidade",
  "Política de cookies": "cookies",
  "Mapa do site": "mapa",
};

function slug(s) { return s.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, ""); }

function LegalContact() {
  return (
    <div className="lg-contact">
      <span className="e">Fale connosco</span>
      <a className="lg-tel" href={"tel:" + IMACX_TEL.replace(/\s/g, "")}>{IMACX_TEL}</a>
      <a className="lg-mail" href={"mailto:" + IMACX_MAIL}>{IMACX_MAIL}</a>
      <div className="lg-contact-row"><span>Segunda a sexta</span><span className="num">9:00 – 18:00</span></div>
      <div className="lg-contact-cities">Lisboa · Porto</div>
    </div>);
}

function LBlocks({ blocks }) {
  return (
    <>
      {blocks.map((b, i) => {
        if (typeof b === "string") return <p key={i}>{b}</p>;
        if (b.contact) return <LegalContact key={i} />;
        if (b.h) return <h4 className="lg-sub" key={i}>{b.h}</h4>;
        if (b.note) return <p className="lg-note" key={i}>{b.note}</p>;
        if (b.list) return <ul className="lg-list" key={i}>{b.list.map((x, j) => <li key={j}>{x}</li>)}</ul>;
        if (b.ol) return <ol className="lg-ol" key={i}>{b.ol.map((x, j) => <li key={j}>{x}</li>)}</ol>;
        if (b.dl) return <dl className="lg-dl" key={i}>{b.dl.map(([k, v], j) => <div className="lg-dl-row" key={j}><dt>{k}</dt><dd>{v}</dd></div>)}</dl>;
        if (b.table) return (
          <div className="lg-table-wrap" key={i}>
            <table className="lg-table">
              <thead><tr>{b.table.head.map((h, j) => <th key={j}>{h}</th>)}</tr></thead>
              <tbody>{b.table.rows.map((r, j) => <tr key={j}>{r.map((c, k) => <td key={k}>{c}</td>)}</tr>)}</tbody>
            </table>
          </div>);
        return null;
      })}
    </>);
}

function LegalPage({ doc, go }) {
  const d = LEGAL_DOCS[doc];
  if (!d) return null;
  const ids = d.sections.map((s) => slug(s.h));
  const [active, setActive] = useState(0);

  const goTo = (idx) => {
    const el = document.getElementById(ids[idx]);
    if (el) window.scrollTo({ top: el.getBoundingClientRect().top + window.scrollY - 88, behavior: "smooth" });
  };

  useEffect(() => {
    const onScroll = () => {
      let cur = 0;
      ids.forEach((id, i) => {
        const el = document.getElementById(id);
        if (el && el.getBoundingClientRect().top <= 140) cur = i;
      });
      setActive(cur);
    };
    window.addEventListener("scroll", onScroll, { passive: true });
    onScroll();
    return () => window.removeEventListener("scroll", onScroll);
  }, [doc]);

  return (
    <div className="lg">
      <div className="hm-bleed">
        <div className="hm-idx hm-rule-l">
          <span><span className="sq" />{d.kicker}</span>
          <span>{d.updated}</span>
        </div>
        <section className="lg-mast">
          <h1 className="lg-h1">{d.title}</h1>
          <p className="lg-lead">{d.lead}</p>
        </section>
      </div>

      <div className="hm-bleed">
        <div className="lg-grid">
          <aside className="lg-toc">
            <span className="lg-toc-lab">Nesta página</span>
            <nav>
              {d.sections.map((s, i) =>
                <button key={i} className="lg-toc-i" data-on={active === i} onClick={() => goTo(i)}>
                  <span className="num">{String(i + 1).padStart(2, "0")}</span>{s.h.replace(/^\d+\s·\s/, "")}
                </button>)}
            </nav>
          </aside>

          <article className="lg-body">
            {d.sections.map((s, i) =>
              <section className="lg-sec" id={ids[i]} key={i}>
                <h3>{s.h}</h3>
                <div className="lg-sec-body"><LBlocks blocks={s.body} /></div>
              </section>)}

            <div className="lg-foot">
              <p>Tem uma questão que estas páginas não respondem? A nossa equipa responde a pessoas, não a tickets.</p>
              <div className="hm-cta">
                <button className="btn-accent" onClick={() => go("request")}>Pedir orçamento {Icons.arrow}</button>
                <button className="btn" onClick={() => go("mapa")}>Mapa do site</button>
              </div>
            </div>
          </article>
        </div>
      </div>
    </div>);
}

/* ---- Sitemap ------------------------------------------------------------- */
function SitemapPage({ go, goCatalog }) {
  const cols = [
    { h: "Loja", links: [
      ["Início", () => go("home")],
      ["Catálogo por categoria", () => go("categories")],
      ["Catálogo completo", () => goCatalog(null)],
      ["Galeria · Portefólio", () => go("gallery")],
      ["Pedir orçamento", () => go("request")],
    ]},
    { h: "Categorias", links: FAMILIES.map((f) => [f.name, () => goCatalog(f.id)]) },
    { h: "A IMACX", links: [
      ["Sobre nós", () => go("about")],
      ["Sustentabilidade & Certificações", () => go("sustentabilidade")],
      ["Blog", () => go("blog")],
    ]},
    { h: "Apoio & legal", links: [
      ["Apoio ao cliente", () => go("apoio")],
      ["Termos e condições", () => go("termos")],
      ["Avisos legais", () => go("avisos")],
      ["Política de privacidade", () => go("privacidade")],
      ["Política de cookies", () => go("cookies")],
    ]},
  ];

  return (
    <div className="lg">
      <div className="hm-bleed">
        <div className="hm-idx hm-rule-l">
          <span><span className="sq" />Mapa do site</span>
          <span className="num">{cols.reduce((n, c) => n + c.links.length, 0)} páginas</span>
        </div>
        <section className="lg-mast">
          <h1 className="lg-h1">Tudo, <span className="o">num sítio</span>.</h1>
          <p className="lg-lead">Todas as páginas do universo IMACX, organizadas. Se procura alguma coisa, começa por aqui.</p>
        </section>
      </div>

      <div className="hm-bleed">
        <div className="sm-grid">
          {cols.map((c, i) =>
            <div className="sm-col" key={i}>
              <h4 className="sm-h">{c.h}</h4>
              <ul>
                {c.links.map(([label, fn], j) =>
                  <li key={j}><button className="sm-link" onClick={fn}>{label}<span className="sm-ar">{Icons.arrow}</span></button></li>)}
              </ul>
            </div>)}
        </div>
      </div>
    </div>);
}

Object.assign(window, { LegalPage, SitemapPage, LEGAL_ROUTE });
