namespace :component do

desc "warns if component view files exist without corresponding documentation"
task :validate_documentation_exists do
  print "Validating that each component has documentation... "
  components_missing_docs = []
  component_views = Dir["app/views/#{GovukPublishingComponents::Config.component_directory_name}/**/*.html.erb"]
  component_views.each do |partial|
    expected_component_docs_file = partial.split("/")[-1].gsub("html.erb", "yml")
    expected_component_docs_file.sub!(/^_/, "")

    expected_component_docs_path = "app/views/#{GovukPublishingComponents::Config.component_directory_name}/docs/#{expected_component_docs_file}"
    components_missing_docs << partial unless File.exist?(expected_component_docs_path)
  end

  if components_missing_docs.any?
    error = "You have components which are missing documentation. These components will not be displayed in the component guide:\n"
    components_missing_docs.each { |component| error += "\t#{component}\n" }
    error += "\n"
    raise NotImplementedError, error
  end
  puts "✔︎"
end

desc "warns if component is missing accessibility criteria"
task :validate_accessibility_criteria_exist do
  print "Validating that each component has accessibility criteria... "
  errors = []

  component_docs = Dir["app/views/#{GovukPublishingComponents::Config.component_directory_name}/**/*.yml"]
  component_docs.each do |doc_file|
    file = YAML.load_file(doc_file)

    if file["accessibility_criteria"].nil? && file["shared_accessibility_criteria"].nil?
      errors << file["name"]
    end
  end
  if errors.any?
    error = "The following components need accessibility criteria:\n#{errors.join("\n")}"
    raise NotImplementedError, error
  end
  puts "✔︎"
end

desc "warns if component view files exist without corresponding documentation or accessibility critera"
task :validate_documentation do
  Rake::Task["component:validate_documentation_exists"].invoke
  Rake::Task["component:validate_accessibility_criteria_exist"].invoke
end

end