update_fastlane

platform :android do
desc 'Deploy to play store'
  lane :beta do |options|

    update_version(
      version: options[:version],
      build: options[:build],
    )

    build(options)

    supply(
      apk: './osu.Android/bin/Release/sh.ppy.osulazer-Signed.apk',
      package_name: 'sh.ppy.osulazer',
      track: 'alpha', # upload to alpha, we can promote it later
      json_key: options[:json_key],
    )
  end

  desc 'Deploy to github release'
  lane :build_github do |options|

    update_version(
      version: options[:version],
      build: options[:build],
    )

    build(options)

    client = HTTPClient.new
    changelog = client.get_content 'https://gist.githubusercontent.com/peppy/aaa2ec1a323554b619671cac6dbbb776/raw'
    changelog.gsub!('$BUILD_ID', options[:build])

    set_github_release(
      repository_name: "ppy/osu",
      api_token: ENV["GITHUB_TOKEN"],
      name: options[:build],
      tag_name: options[:build],
      is_draft: true,
      description: changelog,
      commitish: "master",
      upload_assets: ["osu.Android/bin/Release/sh.ppy.osulazer.apk"]
    )

  end

  desc 'Compile the project'
  lane :build do |options|
    nuget_restore(project_path: 'osu.Android/osu.Android.csproj')
    nuget_restore(project_path: 'osu.Game/osu.Game.csproj')
    nuget_restore(project_path: 'osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj')
    nuget_restore(project_path: 'osu.Game.Rulesets.Taiko/osu.Game.Rulesets.Taiko.csproj')
    nuget_restore(project_path: 'osu.Game.Rulesets.Catch/osu.Game.Rulesets.Catch.csproj')
    nuget_restore(project_path: 'osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj')

    souyuz(
      build_configuration: 'Release',
      solution_path: 'osu.sln',
      platform: "android",
      output_path: "osu.Android/bin/Release/",
      keystore_path: options[:keystore_path],
      keystore_alias: options[:keystore_alias],
      keystore_password: ENV["KEYSTORE_PASSWORD"]
    )
  end

  lane :update_version do |options|

    split = options[:build].split('.')
    split[1] = split[1].to_s.rjust(4, '0')
    android_build = split.join('')

    app_version(
      solution_path: 'osu.sln',
      version: options[:version],
      build: android_build,
    )
  end

end

platform :ios do
  desc 'Deploy to testflight'
  lane :beta do |options|
    update_version(options)

    provision(
      type: 'appstore'
    )

    build(
      build_configuration: 'Release', 
      build_platform: 'iPhone'
    )

    client = HTTPClient.new
    changelog = client.get_content 'https://gist.githubusercontent.com/peppy/ab89c29dcc0dce95f39eb218e8fad197/raw'
    changelog.gsub!('$BUILD_ID', options[:build])

    pilot(
      wait_processing_interval: 900,
      changelog: changelog,
      groups: ['osu! supporters', 'public'],
      distribute_external: true,
      ipa: './osu.iOS/bin/iPhone/Release/osu.iOS.ipa'
    )
  end

  desc 'Compile the project'
  lane :build do
    nuget_restore(project_path: 'osu.iOS/osu.iOS.csproj')
    nuget_restore(project_path: 'osu.Game/osu.Game.csproj')
    nuget_restore(project_path: 'osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj')
    nuget_restore(project_path: 'osu.Game.Rulesets.Taiko/osu.Game.Rulesets.Taiko.csproj')
    nuget_restore(project_path: 'osu.Game.Rulesets.Catch/osu.Game.Rulesets.Catch.csproj')
    nuget_restore(project_path: 'osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj')

    souyuz(
      platform: "ios",
      plist_path: "osu.iOS/Info.plist"
    )
  end

  desc 'Install provisioning profiles using match'
  lane :provision do |options|
    if Helper.is_ci?
      options[:readonly] = true
    end

    match(options)
  end

  lane :update_version do |options|
    options[:plist_path] = 'osu.iOS/Info.plist'
    app_version(options)
  end

  lane :testflight_prune_dry do
    clean_testflight_testers(days_of_inactivity:45, dry_run: true)
  end

  lane :testflight_prune do
    clean_testflight_testers(days_of_inactivity: 45)
  end
end
