#! /usr/bin/env python

# Copyright 2018 Google Inc.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import os
import subprocess
import tempfile
import sys

def skqp(build):
    def adb(*args):
        sys.stdout.write("adb '" + "' '".join(args) + "'\n")
        subprocess.check_call(['adb'] + list(args))

    assert os.path.isdir(build)
    build = os.path.abspath(build)

    os.chdir(os.path.join(os.path.dirname(__file__), os.pardir, os.pardir))

    adb('shell', 'rm -rf /data/local/tmp/skqp; mkdir -p /data/local/tmp/skqp/skqp_assets')

    adb('push', 'resources', '/data/local/tmp/skqp/skqp_assets')

    adb('push', os.path.join(build, 'skqp'), '/data/local/tmp/skqp/skqp')

    cmd = "cd /data/local/tmp/skqp; ./skqp skqp_assets report"
    sys.stdout.write("adb 'shell' '%s'\n" % cmd)
    ret = subprocess.call(['adb', 'shell', cmd])

    tmpdir = tempfile.mkdtemp(prefix='skqp')

    adb('pull', "/data/local/tmp/skqp/report", tmpdir)

    return ret, os.path.join(tmpdir, 'report')

if __name__ == '__main__':
    if len(sys.argv) != 2 or not os.path.isdir(sys.argv[1]):
        sys.stderr.write('Usage\n  %s BUILD_DIR\n\n' % sys.argv[0])
        sys.exit(1)
    try:
        ret, report = skqp(sys.argv[1])
    except subprocess.CalledProcessError:
        sys.stderr.write('Command failed.\n')
        sys.exit(1)

    sys.stdout.write('\nReturn code: %d\nOutput written to "%s"\n' % (ret, report))
    os.system("bin/sysopen " + os.path.join(report, 'report.html'))
