from pathlib import Path
import markdown,os,re,json,html,shutil
root=Path(__file__).resolve().parents[1];site=root/'site';review=site/'review';repo=root.parents[1]
for name in ['fresh-code-review.md']:
 shutil.copy2(root/'reports'/name,review/'reports'/name)
legacy_source=repo/'evidence/legacy';legacy_target=review/'legacy-evidence';legacy_target.mkdir(exist_ok=True)
for p in legacy_source.glob('*'):
 if p.is_file() and p.suffix in ['.json','.jpg','.png'] :shutil.copy2(p,legacy_target/p.name)
maps=[(root/'site',site),(root/'drafts',review/'drafts'),(root/'evidence',review/'evidence'),(root/'reports',review/'reports'),(legacy_source,legacy_target)]
def map_link(match,dest):
 label,url=match.groups()
 if url.startswith('/'):
  for old,new in maps:
   try:relative=Path(url).relative_to(old)
   except ValueError:continue
   target=new/relative
   if target.exists():
    if target.suffix=='.md':target=target.with_name(target.name+'.html')
    return '['+label+']('+os.path.relpath(target,dest.parent)+')'
  return label+' (local evidence: `'+url+'`)'
 return match.group(0)
result=[]
for p in sorted(review.rglob('*.md')):
 dest=p.with_name(p.name+'.html');text=p.read_text();text=re.sub(r'\[([^\]]+)\]\(([^)]+)\)',lambda m:map_link(m,dest),text)
 body=markdown.markdown(text,extensions=['tables','fenced_code','sane_lists'])
 title=next((line.lstrip('# ').strip() for line in text.splitlines() if line.startswith('#')) ,p.stem)
 css=os.path.relpath(site/'flow/flow.css',dest.parent);index=os.path.relpath(review/'review-index.html',dest.parent);raw=p.name
 dest.write_text(f'''<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>{html.escape(title)}</title><link rel="stylesheet" href="{css}"><style>main{{max-width:980px}}table{{display:block;overflow:auto;font-size:14px}}td,th{{padding:10px;border:1px solid #bed5e4;vertical-align:top}}pre{{overflow:auto;background:#edf5fa;padding:15px;font-size:13px}}code{{overflow-wrap:anywhere}}h1{{font-size:30px}}img{{max-width:100%}}p,li{{overflow-wrap:anywhere}}.meta{{font-size:13px}}</style></head><body><header><strong>Komplex Logopédia</strong><span>Review evidence and decisions</span></header><main><p class="meta"><a href="{index}">Complete review index</a> · <a href="{raw}">Original Markdown</a></p>{body}</main></body></html>''')
 result.append({'source':str(p.relative_to(site)),'path':str(dest.relative_to(site)),'title':title,'kind':'readable decision or evidence document'})
(review/'document-map.json').write_text(json.dumps(result,ensure_ascii=False,indent=2));print(f'{len(result)} readable evidence/decision documents')
