require 'rake' require 'jsonapi-resources'

namespace :jsonapi do

namespace :resources do
  desc 'Checks application for orphaned overrides'
  task :check_upgrade => :environment do
    Rails.application.eager_load!

    resource_klasses = ObjectSpace.each_object(Class).select { |klass| klass < JSONAPI::Resource}

    puts "Checking #{resource_klasses.count} resources"

    issues_found = 0

    klasses_with_deprecated = resource_klasses.select { |klass| klass.methods.include?(:find_records) }
    unless klasses_with_deprecated.empty?
      puts "  Found the following resources the still implement `find_records`:"
      klasses_with_deprecated.each { |klass| puts "    #{klass}"}
      puts "  The `find_records` method is no longer called by JR. Please review and ensure your functionality is ported over."

      issues_found = issues_found + klasses_with_deprecated.length
    end

    klasses_with_deprecated = resource_klasses.select { |klass| klass.methods.include?(:records_for) }
    unless klasses_with_deprecated.empty?
      puts "  Found the following resources the still implement `records_for`:"
      klasses_with_deprecated.each { |klass| puts "    #{klass}"}
      puts "  The `records_for` method is no longer called by JR. Please review and ensure your functionality is ported over."

      issues_found = issues_found + klasses_with_deprecated.length
    end

    klasses_with_deprecated = resource_klasses.select { |klass| klass.methods.include?(:apply_includes) }
    unless klasses_with_deprecated.empty?
      puts "  Found the following resources the still implement `apply_includes`:"
      klasses_with_deprecated.each { |klass| puts "    #{klass}"}
      puts "  The `apply_includes` method is no longer called by JR. Please review and ensure your functionality is ported over."

      issues_found = issues_found + klasses_with_deprecated.length
    end

    if issues_found > 0
      puts "Finished inspection. #{issues_found} issues found that may impact upgrading. Please address these issues. "
    else
      puts "Finished inspection with no issues found. Note this is only a cursory check for method overrides that will no \n" \
           "longer be called by JSONAPI::Resources. This check in no way assures your code will continue to function as \n" \
           "it did before the upgrade. Please do adequate testing before using in production."
    end
  end
end

end