#!/usr/bin/env python
#
# Copyright (c) 2015 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""Generate ResourceRewriter.java which overwrites the given package's
   resource id.
"""

import argparse
import os
import sys
import zipfile

from util import build_utils

# Import jinja2 from third_party/jinja2
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__),
                                             '..',
                                             '..',
                                             '..',
                                             'third_party')))
import jinja2


RESOURCE_REWRITER_JAVA="ResourceRewriter.java"

RESOURCE_REWRITER="""/* AUTO-GENERATED FILE.  DO NOT MODIFY. */

package {{ package }};
/**
 * Helper class used to fix up resource ids.
 */
class ResourceRewriter {
    /**
     * Rewrite the R 'constants' for the WebView.
     */
    public static void rewriteRValues(final int packageId) {
        {% for res_package in res_packages %}
        {{ res_package }}.R.onResourcesLoaded(packageId);
        {% endfor %}
    }
}
"""

def ParseArgs(args):
  """Parses command line options.

  Returns:
    An Namespace from argparse.parse_args()
  """
  parser = argparse.ArgumentParser(prog='generate_resource_rewriter')

  parser.add_argument('--package-name',
                      required=True,
                      help='The package name of ResourceRewriter.')
  parser.add_argument('--dep-packages',
                      required=True,
                      help='A list of packages whose resource id will be'
                           'overwritten in ResourceRewriter.')
  parser.add_argument('--output-dir',
                      help='A output directory of generated'
                           ' ResourceRewriter.java')
  parser.add_argument('--srcjar',
                      help='The path of generated srcjar which has'
                           ' ResourceRewriter.java')

  return parser.parse_args(args)


def CreateResourceRewriter(package, res_packages, output_dir):
  build_utils.MakeDirectory(output_dir)
  java_path = os.path.join(output_dir, RESOURCE_REWRITER_JAVA)
  template = jinja2.Template(RESOURCE_REWRITER,
                             trim_blocks=True,
                             lstrip_blocks=True)
  output = template.render(package=package, res_packages=res_packages)
  with open(java_path, 'w') as f:
    f.write(output)

def CreateResourceRewriterSrcjar(package, res_packages, srcjar_path):
  with build_utils.TempDir() as temp_dir:
    output_dir = os.path.join(temp_dir, *package.split('.'))
    CreateResourceRewriter(package, res_packages, output_dir)
    build_utils.DoZip([os.path.join(output_dir, RESOURCE_REWRITER_JAVA)],
                      srcjar_path,
                      temp_dir)


def main():
  options = ParseArgs(build_utils.ExpandFileArgs(sys.argv[1:]))
  package = options.package_name
  if options.output_dir:
    output_dir = os.path.join(options.output_dir, *package.split('.'))
    CreateResourceRewriter(
        package,
        build_utils.ParseGnList(options.dep_packages),
        output_dir)
  else:
    CreateResourceRewriterSrcjar(
        package,
        build_utils.ParseGnList(options.dep_packages),
        options.srcjar)

  return 0

if __name__ == '__main__':
  sys.exit(main())