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

import argparse
import os
import sys

BUILD_CONFIG_TEMPLATE = """
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.


// THIS FILE IS AUTO_GENERATED
// DO NOT EDIT THE VALUES HERE - SEE $flutter_root/tools/gen_android_buildconfig.py
package io.flutter;

public final class BuildConfig {{
  private BuildConfig() {{}}

  public final static boolean DEBUG = {0};
  public final static boolean PROFILE = {1};
  public final static boolean RELEASE = {2};
  public final static boolean JIT_RELEASE = {3};
}}
"""

def main():
  parser = argparse.ArgumentParser(description='Generate BuildConfig.java for Android')
  parser.add_argument('--runtime-mode', type=str, required=True)
  parser.add_argument('--out', type=str, required=True)

  args = parser.parse_args()

  jit_release = 'jit_release' in args.runtime_mode.lower()
  release = not jit_release and 'release' in args.runtime_mode.lower()
  profile = 'profile' in args.runtime_mode.lower()
  debug = 'debug' in args.runtime_mode.lower()
  assert debug or profile or release or jit_release

  with open(os.path.abspath(args.out), 'w+') as output_file:
    output_file.write(BUILD_CONFIG_TEMPLATE.format(str(debug).lower(), str(profile).lower(), str(release).lower(), str(jit_release).lower()))

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