import datetime
import os
import pathlib
import re
import subprocess
import sys

checkout = pathlib.Path(sys.argv[1]).resolve()
output = pathlib.Path(sys.argv[2]) / datetime.datetime.now(datetime.timezone.utc).strftime('%Y%m%dT%H%M%S%fZ')
output.mkdir(parents=True)
sha = subprocess.check_output(['git', 'rev-parse', 'HEAD'], cwd=checkout, text=True).strip()
metadata = f'Commit: {sha}\nPlatform: Linux x86_64\nCheckout directory name: {checkout.name}\n'
metadata += 'Node: ' + subprocess.check_output(['node', '--version'], text=True).strip() + '\n'
metadata += 'No database or provider required; production web build.\n'
env = dict(os.environ, NO_COLOR='1', FORCE_COLOR='0', T3CODE_DEV_SEED='0')
for label, command, cwd in [('install', ['vp', 'i'], checkout), ('build', ['vp', 'build'], checkout / 'apps/web')]:
    with (output / (label + '.raw.log')).open('w') as log:
        result = subprocess.run(command, cwd=cwd, env=env, stdout=log, stderr=subprocess.STDOUT)
    raw = (output / (label + '.raw.log')).read_text(errors='replace')
    clean = re.sub(r'\x1b\[[0-?]*[ -/]*[@-~]', '', raw)
    clean = clean.replace(str(checkout).replace(' ', '%20'), '<checkout>/checkout%20with%20spaces')
    clean = clean.replace(str(checkout), '<checkout>/checkout with spaces')
    clean = clean.replace(str(pathlib.Path.home()), '<home>')
    (output / (label + '.txt')).write_text(metadata + f'Command: {" ".join(command)}\nWorking directory: ' + ('checkout root' if label == 'install' else 'apps/web') + f'\nExit code: {result.returncode}\n\n' + clean)
    print(f'{label}: exit {result.returncode}; output {output / (label + ".txt")}', flush=True)
    if label == 'install' and result.returncode:
        sys.exit(result.returncode)
