#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
# Copyright 2020 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""Script to wrap test_that script.

This script can login to the chromeos machine using the test private key.
"""

from __future__ import print_function

__author__ = 'asharif@google.com (Ahmad Sharif)'

import argparse
import os
import sys

from cros_utils import command_executer
from cros_utils import misc


def Usage(parser, message):
  print('ERROR: %s' % message)
  parser.print_help()
  sys.exit(0)


def Main(argv):
  parser = argparse.ArgumentParser()
  parser.add_argument(
      '-c',
      '--chromeos_root',
      dest='chromeos_root',
      help='ChromeOS root checkout directory')
  parser.add_argument(
      '-r', '--remote', dest='remote', help='Remote chromeos device.')
  options = parser.parse_args(argv)
  if options.chromeos_root is None:
    Usage(parser, 'chromeos_root must be given')

  if options.remote is None:
    Usage(parser, 'remote must be given')

  options.chromeos_root = os.path.expanduser(options.chromeos_root)

  command = 'ls -lt /'
  ce = command_executer.GetCommandExecuter()
  ce.CrosRunCommand(
      command, chromeos_root=options.chromeos_root, machine=options.remote)

  version_dir_path, script_name = misc.GetRoot(sys.argv[0])
  version_dir = misc.GetRoot(version_dir_path)[1]

  # Tests to copy directories and files to the chromeos box.
  ce.CopyFiles(
      version_dir_path,
      '/tmp/' + version_dir,
      dest_machine=options.remote,
      dest_cros=True,
      chromeos_root=options.chromeos_root)
  ce.CopyFiles(
      version_dir_path,
      '/tmp/' + version_dir + '1',
      dest_machine=options.remote,
      dest_cros=True,
      chromeos_root=options.chromeos_root)
  ce.CopyFiles(
      sys.argv[0],
      '/tmp/' + script_name,
      recursive=False,
      dest_machine=options.remote,
      dest_cros=True,
      chromeos_root=options.chromeos_root)
  ce.CopyFiles(
      sys.argv[0],
      '/tmp/' + script_name + '1',
      recursive=False,
      dest_machine=options.remote,
      dest_cros=True,
      chromeos_root=options.chromeos_root)

  # Test to copy directories and files from the chromeos box.
  ce.CopyFiles(
      '/tmp/' + script_name,
      '/tmp/hello',
      recursive=False,
      src_machine=options.remote,
      src_cros=True,
      chromeos_root=options.chromeos_root)
  ce.CopyFiles(
      '/tmp/' + script_name,
      '/tmp/' + script_name,
      recursive=False,
      src_machine=options.remote,
      src_cros=True,
      chromeos_root=options.chromeos_root)
  board = ce.CrosLearnBoard(options.chromeos_root, options.remote)
  print(board)
  return 0


if __name__ == '__main__':
  Main(sys.argv[1:])
