namespace :feature_flagger do

desc "cleaning up keys from storage that are no longer in the rollout.yml file"
task :cleanup_removed_rollouts => :environment do
  keys = FeatureFlagger::Manager.detached_feature_keys
  puts "Found keys to remove: #{keys}"
  keys.each do |key|
    FeatureFlagger::Manager.cleanup_detached key
  end
end

desc "Synchronizes resource_keys with feature_keys, recommended to apps that installed feature flagger before v.1.2.0"
task :migrate_to_resource_keys => :environment do
  storage = FeatureFlagger.config.storage
  storage.synchronize_feature_and_resource
end

desc "Release feature to given identifiers, Usage: `$ bundle exec rake feature_flagger:release\[Account,email_marketing:whitelabel,1,2,3,4\]`"
task :release, [:entity_name, :feature_key] => :environment do |_, args|
  entity = args.entity_name.constantize
  entity_ids = args.extras
  entity.release_id(entity_ids, *args.feature_key.split(':'))
end

desc "Unrelease feature to given identifiers, Usage: `$ bundle exec rake feature_flagger:unrelease\[Account,email_marketing:whitelabel,1,2,3,4\]`"
task :unrelease, [:entity_name, :feature_key] => :environment do |_, args|
  entity, entity_ids = args.entity_name.constantize, args.extras
  entity.unrelease_id(entity_ids, *args.feature_key.split(':'))
end

desc "Release one feature to all entity ids, Usage: `$ bundle exec rake feature_flagger:release_to_all\[Account,email_marketing:whitelabel\]`"
task :release_to_all, [:entity_name, :feature_key] => :environment do |_, args|
  entity = args.entity_name.constantize
  entity.release_to_all(*args.feature_key.split(':'))
end

desc "Unrelease one feature to all entity ids, Usage: `$ bundle exec rake feature_flagger:unrelease_to_all\[Account,email_marketing:whitelabel\]`"
task :unrelease_to_all, [:entity_name, :feature_key] => :environment do |_, args|
  entity = args.entity_name.constantize
  entity.unrelease_to_all(*args.feature_key.split(':'))
end

end