# This file contains the fastlane.tools configuration
# You can find the documentation at https://docs.fastlane.tools
#
# For a list of all available actions, check out
#
#     https://docs.fastlane.tools/actions
#
# For a list of all available plugins, check out
#
#     https://docs.fastlane.tools/plugins/available-plugins
#

# Uncomment the line if you want fastlane to automatically update itself
# update_fastlane

default_platform(:android)

platform :android do

  before_all do |lane, options|
    FileUtils.cp("../app/src/main/assets/tangem-app-config/android/google-services.json", "../app")
  end

  desc "Run detekt"
  lane :detekt do
    FileUtils.cp("../ci_resources/tests_8gb_ram_ci_gradle.properties", "../gradle.properties")
    puts File.read("../gradle.properties")
    gradle(task: "detekt")
  end

  desc "Run tests"
  lane :test do
    FileUtils.cp("../ci_resources/tests_8gb_ram_ci_gradle.properties", "../gradle.properties")
    puts File.read("../gradle.properties")
    gradle(task: "testDebugUnitTest")
  end

  desc "Build a signed release APK"
  lane :release do |options|
     gradle(
       task: "clean assemble",
       build_type: "Release",
       properties: {
         "android.injected.signing.store.file" => options[:keystore],
         "android.injected.signing.store.password" => options[:store_password],
         "android.injected.signing.key.alias" => options[:key_alias],
         "android.injected.signing.key.password" => options[:key_password],
       })
  end

  desc "Build external and release APKs"
  lane :build do |options|
     gradle(task: 'clean') # TODO: remove after fully moving from old CI

     launched_from_github_action = options[:launched_from_github_action] || false # TODO: remove after fully moving from old CI
     if launched_from_github_action
         FileUtils.cp("../ci_resources/build_ci_gradle.properties", "../gradle.properties")
         puts File.read("../gradle.properties")
     end

     gradle(
       task: "bundle",
       build_type: "Release",
       properties: {
          'versionCode' => options[:versionCode],
          'versionName' => options[:versionName],
          "android.injected.signing.store.file" => options[:keystore],
          "android.injected.signing.store.password" => options[:store_password],
          "android.injected.signing.key.alias" => options[:key_alias],
          "android.injected.signing.key.password" => options[:key_password],
       }
     )
     gradle(
       task: "assemble",
       build_type: "Release",
       properties: {
         'versionCode' => options[:versionCode],
         'versionName' => options[:versionName],
         "android.injected.signing.store.file" => options[:keystore],
         "android.injected.signing.store.password" => options[:store_password],
         "android.injected.signing.key.alias" => options[:key_alias],
         "android.injected.signing.key.password" => options[:key_password],
       }
     )
  end

  desc "Submit a new Beta Build to Firebase App Distribution"
  lane :beta do |options|
       firebase_app_distribution(
            app: options[:app_id],
            apk_path: options[:apk_path],
            groups: options[:groups])
  end

  desc "Publish internal and external builds to Firebase App Distribution"
  lane :publishToFirebase do |options|
      FileUtils.cp("../ci_resources/build_ci_gradle.properties", "../gradle.properties")
      puts File.read("../gradle.properties")

    gradle(
      task: "clean assemble",
      build_type: "Internal",
      properties: {
        'versionCode' => ENV['version_code'],
        'versionName' => ENV['version_name'],
      }
    )
    uploaded_release = firebase_app_distribution(
      firebase_cli_token: ENV['firebase_cli_token'],
      app: ENV['app_id_internal'],
      apk_path: ENV['apk_path_internal'],
      groups: ENV['groups'],
      release_notes: ENV['release_notes'],
    )
    release_url = uploaded_release[:testingUri]

    # Applying base64 encoding twice to prevent GA bug "Skip output 'output' since it may contain secret."
    # See https://github.com/orgs/community/discussions/13082#discussioncomment-6776428 for details
    encoded_release_url = Base64.strict_encode64(Base64.strict_encode64(release_url))
    sh("echo 'encoded_release_url=#{encoded_release_url}' >> /workspace/github_output.txt")
  end
end
