"""Point the protected owner browser entry at the verified Mobile code/data.
Preserves its existing page/UI and Apache authentication; no game service action.
"""
import hashlib
import json
import os
from pathlib import Path
import re
import shutil
import sys

root = Path('/var/www/html/ro-th-online')
task = sys.argv[1]
assert re.fullmatch('[a-z0-9-]+', task)
record = json.loads((root / 'deploy' / task / 'release.json').read_text())
assert record['verification']['httpsCodeHashes'] and record['verification']['httpsIndexBothUrls']
release = record['release']
assert re.fullmatch('mobile-[a-f0-9]{8}', release)
page = root / 'public/index.html'
assert not page.is_symlink()
original = page.read_bytes()
text = original.decode('utf-8')
text, n = re.subn(r'var buildUrl = "(?:Build|/Mobile/Build/mobile-[a-f0-9]{8})";',
                   'var buildUrl = "/Mobile/Build/' + release + '";', text)
assert n == 1
text, n = re.subn(r'dataUrl: (?:buildUrl \+ "/WebPreview\.data"|"/Mobile/Build/WebPreview\.data\.[a-f0-9]{8}\.br"),',
                   'dataUrl: "/Mobile/Build/WebPreview.data.' + record['dataHash'][:8] + '.br",', text)
assert n == 1
backup = root / 'deploy' / task / 'owner-index-before.html'
assert not backup.exists()
shutil.copy2(page, backup)
pending = root / 'staging' / task / 'owner-index.html'
pending.write_text(text, encoding='utf-8')
state = page.stat()
os.chmod(pending, state.st_mode)
os.chown(pending, state.st_uid, state.st_gid)
assert page.read_bytes() == original
os.replace(pending, page)
result = dict(release=release, beforeHash=hashlib.sha256(original).hexdigest(),
              indexHash=hashlib.sha256(page.read_bytes()).hexdigest(), authenticationUnchanged=True)
(root / 'deploy' / task / 'owner-release.json').write_text(json.dumps(result, indent=2))
print(json.dumps(result))
