# frozen_string_literal: true

require 'data_classification/migration'

namespace :data_classification do

include DataClassification

desc 'Classify your table/columns in bulk'
task bulk_classify: :environment do
  classifications = []
  unclassified = []

  ActiveRecord::Base.connection.tables.each do |table_name|
    ActiveRecord::Base.connection.columns(table_name).each do |column|
      next if column.comment.present?
      unclassified << [table_name, column.name]
    end
  end

  unclassified.each do |table_name, column_name|
    puts "Table: #{table_name}, Column: #{column_name}"
    puts "Data classification (#{DATA_CLASSIFICATIONS.join(',')}, q(uit), n(ext) >"
    selection = STDIN.gets.chomp
    if selection == 'q'
      break
    elsif selection == 'n'
      next
    elsif DATA_CLASSIFICATIONS.map(&:to_s).include? selection
      classifications << [table_name, column_name, selection]
    else
      puts 'Invalid option, try again.'
      redo
    end
  end

  if classifications.any?
    arguments = classifications.map { |classification| classification.join(':') }
    Rails::Generators.invoke 'data_classification:create', arguments
  else
    puts 'No classifications made'
  end
end

task list: :environment do
  ActiveRecord::Base.connection.tables.each do |table_name|
    ActiveRecord::Base.connection.columns(table_name).each do |column|
      next if column.comment.nil?
      data_classification = JSON.parse(column.comment)

      puts [table_name, column.name, data_classification['tags']].join(',')
    end
  end
end

end