# 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

fastlane_require "dotenv"
fastlane_require "fileutils"
Dotenv.load ".env.secret"

setup_ci if ENV["CI"]
api = "Library/Sources/CommonAPI/API"
metadata = "fastlane/metadata"
logname = "CHANGELOG.txt"
build_path = "build"
derived_data_path = "build/derived_data"

desc "Bump version"
lane :bump do |options|
    unless options[:no_log]
        if options[:since]
            between = [options[:since], "HEAD"]
        else
            between = nil
        end
        log = changelog_from_git_commits(
            between: between,
            pretty: "* %s",
            date_format: "short"
        )
        path = "../#{logname}"
        path_tmp = "#{path}.tmp"
        File.open(path_tmp, "w") { |file|
            file.write(log)
        }
        if system("vim", path_tmp)
            FileUtils.mv(path_tmp, path)
        else
            File.delete(path_tmp)
            UI.user_error!("CHANGELOG editor cancelled")
        end
    end
    version = options[:version]
    build = options[:build]
    increment_build_number(build_number: build)
    unless version.nil? || version.empty?
        increment_version_number_in_xcodeproj(version_number: version)
    end
    git_add(
        path: [api, metadata, logname]
    )
    commit_version_bump(
        message: "Bump version",
        force: true
    )
    add_git_tag(
        includes_lane: false,
        sign: true
    )
end

desc "Run Xcode tests"
lane :test do
    scan(
        xcargs: "CODE_SIGNING_ALLOWED=NO",
        derived_data_path: derived_data_path
    )
end

desc "Push a new beta build to TestFlight"
lane :beta do
    preface = ENV["TESTFLIGHT_PREFACE"]
    log = File.read("../#{logname}")
    changelog = preface + log
    match(type: "appstore")
    gym(
        clean: true,
        build_path: build_path,
        derived_data_path: derived_data_path
    )
    pilot(
        changelog: changelog,
        distribute_external: true,
        notify_external_testers: false
    )
end

desc "Distribute to Public Beta"
lane :public_beta do
    pilot(
        distribute_only: true,
        distribute_external: true,
        notify_external_testers: true
    )
end

desc "Update App Store metadata"
lane :asc_metadata do
    deliver(
        skip_metadata: false,
        skip_screenshots: true
    )
end

desc "Update App Store screenshots"
lane :asc_screenshots do
    deliver(
        skip_metadata: true,
        skip_screenshots: false
    )
end

desc "Submit a build to App Review"
lane :asc_review do |options|
    deliver(
        submit_for_review: true,
        skip_binary_upload: true,
        skip_metadata: false,
        skip_screenshots: false,
        submission_information: {
            add_id_info_uses_idfa: false,
            export_compliance_uses_encryption: false
        }
    )
end

desc "Tag release"
lane :tag_release do |options|
    version = options[:version]
    tag = "v#{version}"
    add_git_tag(
        tag: tag,
        sign: true
    )
    push_git_tags(
        tag: tag
    )
end
