# 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(:ios)

platform :ios do
  desc "Renew and sync App Store signing credentials using the Apple account password"
  lane :certificates do
    credential_variables = %w[
      SIGH_API_KEY SIGH_API_KEY_PATH
      APP_STORE_CONNECT_API_KEY APP_STORE_CONNECT_API_KEY_PATH
      FASTLANE_PASSWORD FASTLANE_DONT_STORE_PASSWORD
    ]
    previous_credentials = credential_variables.to_h { |name| [name, ENV[name]] }

    begin
      credential_variables.each { |name| ENV.delete(name) }
      ENV["FASTLANE_PASSWORD"] = UI.password("Apple account password for dev@logseq.com: ")
      UI.user_error!("Password must not be empty") if ENV["FASTLANE_PASSWORD"].to_s.empty?
      ENV["FASTLANE_DONT_STORE_PASSWORD"] = "1"

      sync_code_signing(type: "appstore", readonly: false)
    ensure
      previous_credentials.each { |name, value| ENV[name] = value }
    end
  end

  desc "Push a new beta build to TestFlight"
  lane :beta do
    setup_ci

    app_store_connect_api_key(
      key_id: ENV["APP_STORE_CONNECT_API_KEY_KEY_ID"],
      issuer_id: ENV["APP_STORE_CONNECT_API_KEY_ISSUER_ID"],
      key_filepath: ENV["APP_STORE_CONNECT_API_KEY_KEY_FILEPATH"],
    )

    sync_code_signing(
      type: "appstore",
      readonly: is_ci
    )

    version_number = get_version_number(
      xcodeproj: "App.xcodeproj",
      target: "Logseq",
    )

    latest_build_number = latest_testflight_build_number(
      version: version_number,
      initial_build_number: 1,
    )

    build_number = increment_build_number(
      xcodeproj: "App.xcodeproj",
      build_number: latest_build_number + 1,
    )

    # Ref: https://docs.fastlane.tools/advanced/fastlane/#directory-behavior
    sh("../../../scripts/patch-xcode-project.sh")

    build_app(
      workspace: "App.xcworkspace",
      destination: "generic/platform=iOS",
      scheme: "Logseq",
      configuration: "Release",
      xcargs: "-allowProvisioningUpdates"
    )

    upload_to_testflight(
      skip_submission: true,
      skip_waiting_for_build_processing: true,
    )

    slack(message: "App Build (#{build_number}) successfully uploaded to TestFlight 🎉!")
  end
end
