#!/usr/bin/env python
"""
gn can only run python scripts.

Generates protobufjs code.
"""
import subprocess
import sys
import os
# TODO(ry) Ideally protobufjs output files should be written into
# target_gen_dir, but its difficult to get this working in a way that parcel can
# resolve their location. (Parcel does not support NODE_PATH.) Therefore this
# hack: write the generated msg.pb.js and msg.pb.d.ts outputs into the js/
# folder, and we check them into the repo. Hopefully this hack can be removed at
# some point. If msg.proto is changed, commit changes to the generated JS
# files.

js_path = os.path.dirname(os.path.realpath(__file__))
pbjs_path = os.path.join(js_path, "node_modules", "protobufjs", "bin")
pbjs_bin = os.path.join(pbjs_path, "pbjs")
pbts_bin = os.path.join(pbjs_path, "pbts")
msg_pbjs_out = os.path.join(js_path, "msg.pb.js")
msg_pbts_out = os.path.join(js_path, "msg.pb.d.ts")
assert os.path.exists(pbjs_bin)
assert os.path.exists(pbts_bin)

proto_in = sys.argv[1]
stamp_file = sys.argv[2]

def touch(fname):
  if os.path.exists(fname):
    os.utime(fname, None)
  else:
    open(fname, 'a').close()

subprocess.check_call([
  "node",
  pbjs_bin,
  "--target=static-module",
  "--wrapper=commonjs",
  "--out=" + msg_pbjs_out,
  proto_in
])
assert os.path.exists(msg_pbjs_out)

subprocess.check_call([
  "node",
  pbts_bin,
  "--out=" + msg_pbts_out,
  msg_pbjs_out
])
assert os.path.exists(msg_pbts_out)

touch(stamp_file)