require "rake"
require "csv"

namespace :geoblacklight_admin do
  namespace :distributions do
    desc "Migrate distributions into DocumentDistributions"
    task migrate: :environment do
      total_documents_processed = 0
      puts "\n--- Migration Start ---"
      Document.find_in_batches(batch_size: 1000) do |documents|
        documents.each do |document|
          # Moves AttrJson-based dct_references_s and Multiple Downloads into DocumentDistributions

          document.distributions_csv.each do |distribution|
            DocumentDistribution.find_or_create_by!(
              friendlier_id: distribution[0],
              reference_type_id: ReferenceType.find_by(name: distribution[1]).id,
              url: distribution[2],
              label: distribution[3]
            )
          end
        rescue => e
          puts "\nError processing distributions for document: #{document.friendlier_id} - #{e.inspect}\n"
        end
        total_documents_processed += documents.size
        puts "Processed #{documents.size} documents in this batch, total processed: #{total_documents_processed}"
      end
      puts "--- Migration End ---\n"
    end

    desc "Audit the distributions migration"
    task audit: :environment do
      total_documents_processed = 0
      puts "\n--- Audit Start ---"
      Document.find_in_batches(batch_size: 1000) do |documents|
        documents.each do |document|
          # Document > Distributions as CSV
          dr_csv = document.references_csv.sort

          # document_distributions
          doc_dists = document.document_distributions.collect { |dr| dr.to_csv }.sort

          if dr_csv != doc_dists
            puts "\nNO MATCH"
            puts "Document: #{document.friendlier_id}"
            puts "CSV Distributions Sorted: #{dr_csv.sort.inspect}"
            puts "Document Distributions Sorted: #{doc_dists.sort.inspect}\n"
          end
        rescue => e
          puts "\nError auditing distributions for document: #{document.friendlier_id} - #{e.inspect}\n"
        end
        total_documents_processed += documents.size
        puts "Processed #{documents.size} documents in this batch, total processed: #{total_documents_processed}"
      end
      puts "--- Audit End ---\n"
    end

    task finalize: :environment do
      # Step 1 - After migrate, flip the ENV var feature flag
      # Done: Remove multiple download links from Documents
      # Done: Remove multiple download links from FormElements (it's a feature there)
      # Done: Remove multiple download links from FormNav (link)
      # Done: Add DocumentDistributions to the FormElements (as a feature - manual)

      # Step 2 - Finalize
      # Remove AttrJson dct_references_s values from Documents (data is redundant and/or incorrect)
    end
  end
end