# frozen_string_literal: true

require "bundler/gem_tasks"
require "rspec/core/rake_task"
require "generators/decidim/app_generator"
require "decidim/component_manager"

RSpec::Core::RakeTask.new(:spec)

task default: :spec

desc "Runs all tests in all Decidim engines"
task test_all: [:test_main, :test_subgems]

desc "Runs all tests in decidim subgems"
task test_subgems: :test_app do
  Decidim::ComponentManager.run_all("rake", include_root: false)
end

desc "Runs all tests in the main decidim gem"
task :test_main do
  Decidim::ComponentManager.new(__dir__).run("rake")
end

desc "Update version in all gems to the one set in the `.decidim-version` file"
task :update_versions do
  Decidim::ComponentManager.replace_versions
end

desc "Installs all gems locally."
task :install_all do
  Decidim::ComponentManager.run_all(
    "rake install:local",
    out: File::NULL
  )
end

desc "Uninstalls all gems locally."
task :uninstall_all do
  Decidim::ComponentManager.run_all(
    "gem uninstall %name -v %version --executables --force",
    out: File::NULL
  )
end

desc "Pushes a new build for each gem."
task release_all: [:update_versions, :check_locale_completeness, :webpack] do
  Decidim::ComponentManager.run_all("rake release")
end

desc "Makes sure all official locales are complete and clean."
task :check_locale_completeness do
  system({ "ENFORCED_LOCALES" => "en,ca,es", "SKIP_NORMALIZATION" => "true" }, "rspec spec/i18n_spec.rb")
end

desc "Generates a dummy app for testing"
task :test_app do
  dummy_app_path = File.expand_path(File.join(Dir.pwd, "spec", "decidim_dummy_app"))

  Dir.chdir(__dir__) do
    sh "rm -fR #{dummy_app_path}", verbose: false

    Decidim::Generators::AppGenerator.start(
      [dummy_app_path, "--path", "../..", "--recreate_db", "--demo"]
    )
  end
end

desc "Generates a development app."
task :development_app do
  Dir.chdir(__dir__) do
    sh "rm -fR development_app", verbose: false
  end

  Decidim::Generators::AppGenerator.start(
    ["development_app", "--path", "..", "--recreate_db", "--seed_db", "--demo"]
  )
end

desc "Build webpack bundle files"
task :webpack do
  sh "yarn install && yarn build:prod"
end