# SDR: sdr-0017 — espelha normativos e auxiliares em site/repositorio/ para deploy Firebase.
# Uso (na raiz do repositório): python arquitetura-contratual/scripts/sync_site_repositorio.py

from __future__ import annotations

import shutil
import sys
from pathlib import Path

REPO = Path(__file__).resolve().parents[2]
SITE = REPO / "arquitetura-contratual" / "site"
DEST = SITE / "repositorio"
AC = REPO / "arquitetura-contratual"


def rm_tree(p: Path) -> None:
    if p.exists():
        shutil.rmtree(p)


def copy_tree(src: Path, dst: Path) -> None:
    if not src.is_dir():
        print(f"Aviso: origem inexistente, ignorando: {src}", file=sys.stderr)
        return
    shutil.copytree(src, dst, dirs_exist_ok=True)


def copy_file(src: Path, dst: Path) -> None:
    if not src.is_file():
        print(f"Aviso: arquivo inexistente, ignorando: {src}", file=sys.stderr)
        return
    dst.parent.mkdir(parents=True, exist_ok=True)
    shutil.copy2(src, dst)


def rewrite_modelo_for_site(html: str) -> str:
    """Ajusta modelo-central copiado para site/ (paths relativos ao hosting)."""
    pairs = (
        ("./site/assets/", "./assets/"),
        ('href="./site/', 'href="./'),
        ('src="./site/', 'src="./'),
        ("./site/ver-md.html", "./ver-md.html"),
        ("?f=../../SDRs/", "?f=repositorio/SDRs/"),
        ("?f=../../processo-contratacao/", "?f=repositorio/processo-contratacao/"),
        ('href="../processo-contratacao/', 'href="./repositorio/processo-contratacao/'),
        ('href="../SDRs/', 'href="./repositorio/SDRs/'),
        ("?f=../ANS-", "?f=repositorio/arquitetura-contratual/ANS-"),
        ("?f=../IMR-", "?f=repositorio/arquitetura-contratual/IMR-"),
        ("?f=../Proposta", "?f=repositorio/arquitetura-contratual/Proposta"),
        ('href="./ANS-Acordo', 'href="./repositorio/arquitetura-contratual/ANS-Acordo'),
        ('href="./IMR-sintese', 'href="./repositorio/arquitetura-contratual/IMR-sintese'),
        ('href="./Proposta', 'href="./repositorio/arquitetura-contratual/Proposta'),
    )
    for a, b in pairs:
        html = html.replace(a, b)
    return html


def main() -> None:
    rm_tree(DEST)
    DEST.mkdir(parents=True, exist_ok=True)

    copy_tree(REPO / "SDRs", DEST / "SDRs")
    copy_file(REPO / "AGENTS.md", DEST / "AGENTS.md")
    # Espelho para links no HTML estático (site/sdr/): equivalente ao .mdc no Cursor
    _pb = REPO / ".cursor" / "rules" / "portugues-brasil-respostas.mdc"
    if _pb.is_file():
        copy_file(_pb, DEST / "SDRs" / "governance" / "rules" / "portugues-brasil-respostas.md")
    copy_tree(REPO / "Informacoes-gerais", DEST / "Informacoes-gerais")
    copy_tree(REPO / "PPSI", DEST / "PPSI")

    pc_docs = REPO / "processo-contratacao" / "02_planejamento_in94" / "documentos"
    if pc_docs.is_dir():
        copy_tree(pc_docs, DEST / "processo-contratacao" / "02_planejamento_in94" / "documentos")
    indice = REPO / "processo-contratacao" / "00_controle_geral" / "INDICE_PROCESSO.md"
    copy_file(indice, DEST / "processo-contratacao" / "00_controle_geral" / "INDICE_PROCESSO.md")

    ac_dst = DEST / "arquitetura-contratual"
    for name in (
        "analise-cobertura-ppsi.md",
        "ANS-Acordo-de-Niveis-de-Servico-modelo.md",
        "IMR-sintese-executiva.md",
        "memoria-calculo-remuneracao-ic-modelo.md",
    ):
        copy_file(AC / name, ac_dst / name)

    prop = AC / "Proposta - Modelo de Central de Serviços e Infraestrutura de TI.md"
    if prop.is_file():
        copy_file(prop, ac_dst / prop.name)

    dib = REPO / "Dados-ibama"
    for md_name in (
        "itens-configuracao-cmdb-top100.md",
        "mapa-ativos-localidades-cmdb_byCodex.md",
        "mapa-ativos-por-localidade-dimensionamento.md",
        "profissionais-contrato-operacao-bycodex.md",
    ):
        p = dib / md_name
        if p.is_file():
            copy_file(p, DEST / "Dados-ibama" / md_name)

    # ADRs e guias referenciados nos SDRs (links ../docs/ no Markdown)
    docs_adrs = REPO / "docs" / "architecture" / "adrs"
    if docs_adrs.is_dir():
        copy_tree(docs_adrs, DEST / "docs" / "architecture" / "adrs")
    nblm = REPO / "docs" / "notebook-lm-fontes.md"
    if nblm.is_file():
        copy_file(nblm, DEST / "docs" / "notebook-lm-fontes.md")

    msti = REPO / "modelo-servicos-ti" / "README.md"
    if msti.is_file():
        copy_file(msti, DEST / "modelo-servicos-ti" / "README.md")

    ref_script = REPO / "scripts" / "gerar_referencia_cmdb_informacoes_gerais.py"
    if ref_script.is_file():
        copy_file(ref_script, DEST / "scripts" / ref_script.name)

    ac_scripts = AC / "scripts"
    if ac_scripts.is_dir():
        for name in (
            "gerar_html_estatico_sdrs.py",
            "sync_site_repositorio.py",
            "verificar_links_e_inventario_site.py",
            "requirements-gerar-html-sdr.txt",
        ):
            p = ac_scripts / name
            if p.is_file():
                copy_file(p, DEST / "arquitetura-contratual" / "scripts" / name)

    gi = REPO / ".gitignore"
    if gi.is_file():
        copy_file(gi, DEST / "referencia-gitignore.md")

    modelo_src = AC / "modelo-central-servicos.html"
    modelo_dst = SITE / "modelo-central-servicos.html"
    if modelo_src.is_file():
        raw = modelo_src.read_text(encoding="utf-8")
        modelo_dst.write_text(rewrite_modelo_for_site(raw), encoding="utf-8")

    sdr_md = list((DEST / "SDRs").glob("sdr-*.md"))
    if len(sdr_md) < 5:
        print("Erro: poucos SDRs copiados.", file=sys.stderr)
        sys.exit(1)

    patch_site_html_pages()

    readme = DEST / "README.md"
    readme.write_text(
        """# Espelho estático (`site/repositorio/`)

Esta pasta é **gerada** pelo script `arquitetura-contratual/scripts/sync_site_repositorio.py`.
O texto canônico continua na **raiz do repositório Git** (`SDRs/`, `Informacoes-gerais/`, etc.).

## Conteúdo

- `SDRs/` — especificações `sdr-*.md` e metadocumentação relacionada
- `Informacoes-gerais/` — referências CMDB curadas e legado
- `PPSI/` — relatórios simples por segmento
- `arquitetura-contratual/` — ANS modelo, IMR-síntese, memória de cálculo, análise PPSI, Proposta (cópia)
- `processo-contratacao/` — documentos IN94 espelhados usados no site
- `Dados-ibama/` — Markdown de apoio (top100 CMDB, mapas, profissionais)
- `docs/architecture/adrs/` — ADRs espelhados; `docs/notebook-lm-fontes.md`
- `modelo-servicos-ti/README.md`, `scripts/gerar_referencia_cmdb_informacoes_gerais.py`, scripts de geração do site em `arquitetura-contratual/scripts/`
- `referencia-gitignore.md` — cópia do `.gitignore` da raiz (leitura no navegador)

## Acesso no Firebase

Arquivos `.md` aqui são servidos como **estáticos** pelo Hosting. O `access-gate.js` das páginas HTML
**não** intercepta o download direto de `.md` por URL — trate como **ofuscação**, não segredo criptográfico.

## Atualizar

Na raiz do repositório: `python arquitetura-contratual/scripts/sync_site_repositorio.py`
""",
        encoding="utf-8",
    )

    print(f"OK: {DEST} — {len(sdr_md)} arquivos sdr-*.md; modelo em {modelo_dst.name}")


def patch_site_html_pages() -> None:
    """Atualiza links nos HTML multipágina para apontar a site/repositorio/."""
    pairs = (
        ("?f=../../SDRs/", "?f=repositorio/SDRs/"),
        ('href="../../SDRs/', 'href="./repositorio/SDRs/'),
        ("../../SDRs/", "./repositorio/SDRs/"),
        ("?f=../../Dados-ibama/", "?f=repositorio/Dados-ibama/"),
        ("../../Dados-ibama/", "repositorio/Dados-ibama/"),
        ("?f=../../processo-contratacao/", "?f=repositorio/processo-contratacao/"),
        ('href="../../processo-contratacao/', 'href="./repositorio/processo-contratacao/'),
        ("../modelo-central-servicos.html", "./modelo-central-servicos.html"),
        ("?f=../ANS-", "?f=repositorio/arquitetura-contratual/ANS-"),
        ("?f=../IMR-", "?f=repositorio/arquitetura-contratual/IMR-"),
        ("?f=../memoria-calculo", "?f=repositorio/arquitetura-contratual/memoria-calculo"),
        ("?f=../Proposta", "?f=repositorio/arquitetura-contratual/Proposta"),
        ('href="../ANS-', 'href="./repositorio/arquitetura-contratual/ANS-'),
        ('href="../IMR-', 'href="./repositorio/arquitetura-contratual/IMR-'),
        ('href="../memoria-calculo', 'href="./repositorio/arquitetura-contratual/memoria-calculo'),
        ('href="../Proposta', 'href="./repositorio/arquitetura-contratual/Proposta'),
    )
    for path in sorted(SITE.glob("*.html")):
        if path.name == "modelo-central-servicos.html":
            continue
        text = path.read_text(encoding="utf-8")
        orig = text
        for a, b in pairs:
            text = text.replace(a, b)
        if text != orig:
            path.write_text(text, encoding="utf-8")


if __name__ == "__main__":
    main()
