# Customise this file, documentation can be found here:
# https://github.com/KrauseFx/fastlane/tree/master/docs
# All available actions: https://github.com/KrauseFx/fastlane/blob/master/docs/Actions.md
# can also be listed using the `fastlane actions` command

# Change the syntax highlighting to Ruby
# All lines starting with a # are ignored when running `fastlane`

# By default, fastlane will send which actions are used
# No personal data is shared, more information on https://github.com/fastlane/enhancer
# Uncomment the following line to opt out
# opt_out_usage

# If you want to automatically update fastlane if a new version is available:
# update_fastlane

# This is the minimum version number required.
# Update this, if you use features of a newer version
fastlane_version '1.100.0'

default_platform :ios

#===

companyName = 'XCEssentials'
companyPrefix = 'XCE'
repoName = 'APIClient'
repoURL = 'https://github.com/' + companyName + '/' + repoName
moduleName = companyPrefix + repoName
projName = 'Main' + '.xcodeproj'
podspecFilePath = './' + moduleName + '.podspec'

#===

platform :ios do

  lane :finalize_release do

    ensure_git_branch(
      branch: 'release/*'
    )

    # ===

    ensure_git_status_clean

    # ===

    pod_lib_lint(
      allow_warnings: true
    )

    # ===

    versionNumber = get_version_number(xcodeproj: projName)
    puts 'Current VERSION number: ' + versionNumber

    # === Infer new version number

    defaultNewVersion = git_branch.split('/').last

    # === Define new version number

    useInferredNEWVersionNumber = prompt(
      text: 'Proceed with inferred NEW version number (' + defaultNewVersion + ')?',
      boolean: true
    )

    if useInferredNEWVersionNumber

      newVersionNumber = defaultNewVersion

    else

      newVersionNumber = prompt(text: 'New VERSION number:')

    end
    
    # === Apply NEW version number and increment build number

    increment_version_number(
      xcodeproj: projName,
      version_number: newVersionNumber
    )

    increment_build_number(
      xcodeproj: projName
    )

    # ===

    newBuildNumber = get_build_number(xcodeproj: projName)

    commit_version_bump( # it will fail if more than version bump
      xcodeproj: projName,
      message: 'Version Bump to ' + newVersionNumber + ' (' + newBuildNumber + ')'
    )

    # ===

    version_bump_podspec(
      path: podspecFilePath,
      version_number: newVersionNumber
    )

    git_commit(
      path: podspecFilePath,
      message: 'Version Bump to ' + newVersionNumber + ' in Podspec file'
    )

  end

  # ===

  lane :regenerate_project do

    # === Remember current version and build numbers

    versionNumber = get_version_number(xcodeproj: projName)
    buildNumber = get_build_number(xcodeproj: projName)

    # === Remove completely current project file/folder
    
    sh 'cd ./.. && rm -r ./' + projName

    # === Regenerate project

    # default initial location for any command
    # is inside 'Fastlane' folder

    sh 'cd ./.. && struct generate'

    # === Set proper current version and build numbers

    increment_version_number(
      xcodeproj: projName,
      version_number: versionNumber
    )

    increment_build_number(
      xcodeproj: projName,
      build_number: buildNumber
    )

    # === Sort all project entries

    sh 'cd ./.. && xcodeproj sort'

    # === Add custom 'Run Script Phase' entries

    sh 'cd ./.. && ruby ./Scripts/AfterReGenerateProject.rb ' + projName

  end

  # ===

  lane :generate_project do

    # === Generate project from scratch

    # default initial location for any command
    # is inside 'Fastlane' folder

    sh 'cd ./.. && struct generate'

    # === Set proper build number (proper version number is stored in the Info file)

    newBuildNumber = prompt(text: 'Desired BUILD number:')

    increment_build_number(
      xcodeproj: projName,
      build_number: newBuildNumber
    )

    # === Sort all project entries

    sh 'cd ./.. && xcodeproj sort'

    # === Add custom 'Run Script Phase' entries

    sh 'cd ./.. && ruby ./Scripts/AfterReGenerateProject.rb ' + projName

  end

end



# More information about multiple platforms in fastlane: https://github.com/KrauseFx/fastlane/blob/master/docs/Platforms.md
# All available actions: https://github.com/KrauseFx/fastlane/blob/master/docs/Actions.md
