class Fastlane::Actions::SetChangelogAction

def self.authors

def self.authors
  ["KrauseFx"]
end

def self.available_options

def self.available_options
  [
    FastlaneCore::ConfigItem.new(key: :app_identifier,
                               short_option: "-a",
                               env_name: "FASTLANE_APP_IDENTIFIER",
                               description: "The bundle identifier of your app",
                               default_value: CredentialsManager::AppfileConfig.try_fetch_value(:app_identifier)),
    FastlaneCore::ConfigItem.new(key: :username,
                               short_option: "-u",
                               env_name: "FASTLANE_USERNAME",
                               description: "Your Apple ID Username",
                               default_value: CredentialsManager::AppfileConfig.try_fetch_value(:apple_id)),
    FastlaneCore::ConfigItem.new(key: :version,
                                 env_name: "FL_SET_CHANGELOG_VERSION",
                                 description: "The version number to create/update",
                                 optional: true),
    FastlaneCore::ConfigItem.new(key: :changelog,
                                 env_name: "FL_SET_CHANGELOG_CHANGELOG",
                                 description: "Changelog text that should be uploaded to iTunes Connect",
                                 optional: true)
  ]
end

def self.description

def self.description
  "Set the changelog for all languages on iTunes Connect"
end

def self.details

def self.details
  "This is useful if you have only one changelog for all languages"
end

def self.is_supported?(platform)

def self.is_supported?(platform)
  [:ios, :mac].include? platform
end

def self.run(params)

def self.run(params)
  require 'spaceship'
  Spaceship::Tunes.login(params[:username])
  app = Spaceship::Application.find(params[:app_identifier])
  version_number = params[:version]
  unless version_number
    # Automatically fetch the latest version
    Helper.log.info "Fetching the latest version for this app"
    if app.edit_version and app.edit_version.version
      version_number = app.edit_version.version
    else
      Helper.log.info "You have to specify a new version number: "
      version_number = STDIN.gets.strip
    end
  end
  Helper.log.info "Going to update version #{version_number}"
  changelog = params[:changelog]
  unless changelog
    path = "./fastlane/changelog.txt"
    Helper.log.info "Looking for changelog in '#{path}'..."
    if File.exist? path
      changelog = File.read(path)
    else
      Helper.log.error "Couldn't find changelog.txt"
      Helper.log.info "Please enter the changelog here:"
      changelog = STDIN.gets
    end
  end
  Helper.log.info "Going to update the changelog to:\n\n#{changelog}\n\n"
  if (v = app.edit_version)
    if v.version != version_number
      # Version is already there, make sure it matches the one we want to create
      Helper.log.info "Changing existing version number from '#{v.version}' to '#{version_number}'"
      v.version = version_number
      v.save!
    else
      Helper.log.info "Updating changelog for existing version #{v.version}"
    end
  else
    Helper.log.info "Creating the new version: #{version_number}"
    app.create_version!(version_number)
    app = Spaceship::Application.find(params[:app_identifier]) # Replace with .reload method once available
    v = app.edit_version
  end
  v.release_notes.languages.each do |lang|
    v.release_notes[lang] = changelog
  end
  Helper.log.info "Uploading changes to iTunes Connect..."
  v.save!
  Helper.log.info "👼 Successfully pushed the new changelog to #{v.url}".green
end