# Copyright © 2017 Applause Inc. All rights reserved.

namespace :applause_pod do

APPLAUSE_PODS_SOURCE = "ssh://git@github.com/ApplauseAQI/cocoa-pods-specs.git"
COCOA_PODS_SOURCE = "ssh://git@github.com/CocoaPods/Specs.git"

desc 'Release new pod version if it was not yet released'
task :release do
  pod_version = pod_version()
  unless pod_version.nil?
    if pod_not_published(pod_version)
      create_tag(pod_version)
      publish_pod
    else
      puts "Pod version already published"
    end
  end
end

desc 'Validate the pod'
task :validate do
  system("pod lib lint --sources='#{APPLAUSE_PODS_SOURCE}, #{COCOA_PODS_SOURCE}' --allow-warnings")
end

desc 'Publish the pod to Applause podspec repo'
task :publish do
  system("pod repo push applause --sources='#{APPLAUSE_PODS_SOURCE}, #{COCOA_PODS_SOURCE}' --allow-warnings")
end

desc 'Updates Applause podspec repo'
task :update_repo => :add_repo do
  system("pod repo update")
end

desc 'Adds Applause podspec repo'
task :add_repo do
  system("pod repo add applause #{APPLAUSE_PODS_SOURCE}")
end

private
def pod_version
  podspecs = Pathname.glob(File.join(Dir.pwd, '*.podspec{.json,}'))
  unless podspecs.empty?
    podspec_path = podspecs.first
    puts podspec_path
    spec = Pod::Specification.from_file(podspec_path)
    puts "Pod version: #{spec.version}"
    return spec.version.to_s.strip
  end
  puts "Can't find podspec in the directory"
  return nil
end

private
def pod_not_published(pod_version)
  sdk_repo = Git.open('.')
  return !(sdk_repo.tags.any? { |tag| tag.name == pod_version })
end

private
def create_tag(pod_version)
  puts "Creating tag"
  sdk_repo = Git.open('.')
  sdk_repo.add_tag(pod_version)
  sdk_repo.push('origin', "refs/tags/#{pod_version}")
end

private
def publish_pod
  puts "Publishing pod"
  Rake::Task["applause_pod:publish"].invoke
end

end