import random

DEBUG_ARG='JAVA_TOOL_OPTIONS="-Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=5005,suspend=y"'
FORCE_INSTALL=True
NONE='NONE'

SRC = 'src/main/java/**/'
TEST = 'src/test/java/**/'
RESOURCES_ROOT = 'src/main/resources/'
TEST_RESOURCES_ROOT = 'src/test/resources/'

include_defs('//onos.defs')

def _get_name():
    base_path = get_base_path()
    return ONOS_ARTIFACT_BASE + base_path.replace('/', '-') #TODO Unix-separator

def checkstyle(
    name,
    srcs = None,
    jar_target = None,
    ):

    if srcs and jar_target:
        base = get_base_path()
        files = '%s\n%s\n' % (name, base) + '\n'.join(['%s/%s' % (base, s) for s in srcs])

        genrule(
                name = name + '-checkstyle-files',
                bash = "echo '%s' > $OUT" % files,
                srcs = srcs,
                out = 'checkstyle-files.txt',
        )

        sh_test(
                name = name + '-checkstyle',
                test = '//tools/build/conf:start-buck-daemon',
                deps = [ jar_target,
                         '//tools/build/conf:onos-java-header',
                         '//tools/build/conf:onos-build-conf', ],
                args = [
                    '$(location //tools/build/conf:buck-daemon-jar)',
                    'checkstyle',
                    '$(location :' + name + '-checkstyle-files)',
                    '$(location //tools/build/conf:checkstyle-xml)',
                    '$(location //tools/build/conf:suppressions-xml)',
                    ],
                test_rule_timeout_ms = 20000,
                labels = [ 'checkstyle' ],
        )

def java_doc(
    name,
    title,
    pkgs,
    paths,
    srcs = [],
    deps = [],
    visibility = [],
    do_it_wrong = False,
  ):
  if do_it_wrong:
    sourcepath = paths
  else:
    sourcepath = ['$SRCDIR/' + n for n in paths]

  if len(srcs) != 0:
    cmd = ' '.join([
        'while ! test -f .buckconfig; do cd ..; done;',
        'javadoc',
        '-tag onos.rsModel:a:"onos model"',
        '-quiet',
        '-protected',
        '-encoding UTF-8',
        '-charset UTF-8',
        '-notimestamp',
        '-windowtitle "' + title + '"',
        '-link http://docs.oracle.com/javase/8/docs/api',
        '-subpackages ',
        ':'.join(pkgs),
        '-sourcepath ',
        ':'.join(sourcepath),
        ' -classpath ',
        ':'.join(['$(classpath %s)' % n for n in deps]),
        '-d $TMP',
      ]) + ';jar cf $OUT -C $TMP .'

    genrule(
      name = name,
      cmd = cmd,
      srcs = srcs,
      out = name + '.jar',
      visibility = visibility,
)

def sonar(
    name,
    test = False
    ):

  cmd = '; '.join([ 'rm -f $OUT',
          'printf "%(src_base)s = " >> $OUT',
          '%(srcs)s >> $OUT',
          'echo "%(binary_base)s = %(classes)s" >> $OUT',
          'printf "%(lib_base)s = " >> $OUT',
          '%(libraries)s >> $OUT'
        ]) % {
          'srcs' : "echo $(srcs :%s) | sed 's/ /,/g'" % name,
          'classes' : ("$(bin_dir :%s#non-osgi)" if not test else "$(bin_dir :%s)") % name,
          'libraries' : "echo $(classpath :%s) | sed 's/:/,/g'" % name,
          'src_base' : 'sonar.sources' if not test else 'sonar.tests',
          'binary_base' : 'sonar.java.binaries' if not test else 'sonar.java.test.binaries',
          'lib_base' : 'sonar.java.libraries' if not test else 'sonar.java.test.libraries'
        }
  # FIXME do we need to specify dep here or with the expander cover it?
  genrule(
      name = name + "-sonar",
      cmd = cmd,
      out = 'sonar-project.properties'
  )

def osgi_jar(
    name = None,
    srcs = None,
    group_id = ONOS_GROUP_ID,
    version = ONOS_VERSION,
    deps = [],
    visibility = ['PUBLIC'],
    license = 'NONE',
    description = '',
    debug = False,
    import_packages = '*',
    dynamicimport_packages = '',
    export_packages = '!.,!*.impl.*,!*.internal.*,*',
    package_name_root = 'org.onosproject',
    include_resources = {},
    web_context = NONE,
    api_title = None,
    api_version = NONE,
    api_package = NONE,
    api_description = NONE,
    resources = NONE,
    resources_root = None,
    tests = None,
    do_javadocs = True,
    do_checkstyle = True,
    **kwargs
    ):

  # if name and _get_name() != name:
  #     print _get_name(), '!=', name
  if name is None:
      name = _get_name()

  if srcs is None:
      srcs = glob([SRC + '/*.java'])

  if resources == NONE and resources_root is not None:
      resources = glob([resources_root + '**'])
  elif resources == NONE:
      resources = glob([RESOURCES_ROOT + '**'])

  if resources and not resources_root:
      resources_root = RESOURCES_ROOT

  mvn_coords = group_id + ':' + name + ':' + version

  onos_jar(
      name = name,
      srcs = srcs + glob(['src/main/webapp/**']),
      deps = deps,
      visibility = visibility,
      resources = resources,
      resources_root = resources_root,
      bundle_name = name,
      group_id = group_id,
      bundle_version = version,
      bundle_license = license,
      bundle_description = description,
      import_packages = import_packages,
      export_packages = export_packages,
      include_resources = include_resources,
      dynamicimport_packages = dynamicimport_packages,
      web_context = web_context,
      api_title = api_title,
      api_version = api_version,
      api_package = api_package,
      api_description = api_description,
      tests = tests,
      maven_coords = mvn_coords,
      **kwargs
  )

  ### Checkstyle
  if do_checkstyle:
      checkstyle(
          name = name + '-checkstyle-files',
          srcs = srcs,
          jar_target = ':'+ name,
      )

  if do_javadocs:
      java_doc(
           name = name + '-javadoc',
           title = 'Java Docs',
           pkgs = [ package_name_root ],
           paths = [ 'src/main/java' ],
           srcs = srcs,
           deps = deps,
           visibility = visibility,
           do_it_wrong = False,
      )

  # TODO add project config for intellij
  # project_config(
  #   src_target = ':' + name,
  #   src_roots = [ 'src/main/java' ],
  #   test_target = ':' + name + '-tests',
  #   test_roots = [ 'src/test/java' ],
  # )

  ### .m2 Install
  mvn_cmd = ' '.join(( 'mvn install:install-file',
                       '-Dfile=$(location :%s)' % name,
                       '-DgroupId=%s' % group_id,
                       '-DartifactId=%s' % name,
                       '-Dversion=%s' % version,
                       '-Dpackaging=jar' ))
  cmd = mvn_cmd + ' > $OUT'
  if FORCE_INSTALL:
    # Add a random number to the command to force this rule to run.
    # TODO We should make this configurable from CLI, perhaps with a flag.
    cmd = 'FOO=%s ' % random.random() + cmd
  genrule(
    name = name + '-install',
    bash = cmd,
    out = 'install.log',
    visibility = visibility,
  )
  sonar(
    name = name,
  )

def osgi_jar_with_tests(
        name = None,
        deps = [],
        group_id = ONOS_GROUP_ID,
        version = ONOS_VERSION,
        test_srcs = None,
        test_deps = [ '//lib:TEST' ],
        test_resources = None,
        test_resources_root = None,
        visibility = [ 'PUBLIC' ],
        **kwargs
    ):

  if name is None:
      name = _get_name()

  if test_resources and not test_resources_root:
      test_resources_root = TEST_RESOURCES_ROOT
  if test_resources_root and not test_resources:
      test_resources = glob([test_resources_root + '**'])
  if not test_resources and not test_resources_root:
      test_resources = glob([TEST_RESOURCES_ROOT + '**'])
      if test_resources:
        test_resources_root = TEST_RESOURCES_ROOT

  if test_srcs is None:
      test_srcs = glob([TEST + '/*.java'])

  mvn_coords = group_id + ':' + name + ':jar:tests:' + version

  if test_srcs:
      java_test(
        name = name + '-tests',
        srcs = test_srcs,
        deps = deps +
               test_deps +
               [':' + name + '#non-osgi'],
        resources = test_resources,
        resources_root = test_resources_root,
        maven_coords = mvn_coords,
        visibility = visibility,
      )

      checkstyle(
          name = name + '-tests',
          srcs = test_srcs,
          jar_target = ':' + name + '-tests',
      )

      sonar(
          name = name + '-tests',
          test = True
      )

      osgi_jar(name = name,
               deps = deps,
               group_id = group_id,
               version = version,
               visibility = visibility,
               tests = [':' + name + '-tests'],
               **kwargs)
  else:
      osgi_jar(name = name,
               deps = deps,
               group_id = group_id,
               version = version,
               visibility = visibility,
               **kwargs)

def tar_file(
   name,
   srcs,
   root = None,
   out = None,
   visibility = [ 'PUBLIC' ],
   ):

   cmd = ( 'mkdir -p $TMP/%(root_dir)s && '
           'cp -R -L $SRCDIR/* $TMP/%(root_dir)s && '
           'tar -C $TMP -zcf $OUT %(root_dir)s' ) % {
           'root_dir': root if root is not None else name
         }

   genrule(
       name = name,
       srcs = srcs,
       bash = cmd,
       out = out if out is not None else ( root if root is not None else name ) + '.tar.gz',
       visibility = visibility,
   )

def only_lib_dep_pom(
    name,
    src,
    out,
    version = ONOS_VERSION,
    onosGroupId = ONOS_GROUP_ID,
    visibility = [ 'PUBLIC' ],
    ):

    cmd = 'grep -v \<module\> ' + src + ' | sed "s#<modules>#<modules><module>lib</module>#" >$OUT'

    genrule(
        name = name,
        srcs = [ src ],
        bash = cmd,
        out = out,
        visibility = visibility,
        maven_coords = onosGroupId + ':onos:pom:' + version,
    )

def pass_thru_pom(
    name,
    src,
    out,
    artifactId,
    version = ONOS_VERSION,
    onosGroupId = ONOS_GROUP_ID,
    visibility = [ 'PUBLIC' ],
    ):

    cmd = 'cp ' + src + ' $OUT'

    genrule(
        name = name,
        srcs = [ src ],
        bash = cmd,
        out = out,
        visibility = visibility,
        maven_coords = onosGroupId + ':' + artifactId + ':pom:' + version,
    )
