require 'csv' require 'open-uri' require 'time'

namespace 'usman' do

namespace 'import' do
  namespace 'data' do

    desc "Import all data in sequence"
    task 'all' => :environment do

      import_list = ["users", "permissions"]

      import_list.each do |item|
        print "Importing #{item.titleize} \t".yellow
        begin
          Rake::Task["usman:import:data:#{item}"].invoke
        rescue ArgumentError => e
            puts "Loading #{item} - Failed - #{e.message}".red
        rescue Exception => e
          puts "Importing #{item.titleize} - Failed - #{e.message}".red
          puts "Backtrace:\n\t#{e.backtrace.join("\n\t")}"
        end
      end
      puts " "
    end

    ["User", "Permission"].each do |cls_name|
      name = cls_name.underscore.pluralize
      desc "Import #{cls_name.pluralize}"
      task name => :environment do
        verbose = true
        verbose = false if ["false", "f","0","no","n"].include?(ENV["verbose"].to_s.downcase.strip)

        destroy_all = false
        destroy_all = true if ["true", "t","1","yes","y"].include?(ENV["destroy_all"].to_s.downcase.strip)

        path = Rails.root.join('db', 'data', "#{cls_name.constantize.table_name}.csv")
        path = Usman::Engine.root.join('db', 'data', "#{cls_name.constantize.table_name}.csv") unless File.exists?(path)

        cls_name.constantize.destroy_all if destroy_all
        cls_name.constantize.import_data_file(path, true, verbose)
        puts "Importing Completed".green if verbose
      end
    end

    namespace 'dummy' do

      desc "Import all dummy data in sequence"
      task 'all' => :environment do

        import_list = ["users", "permissions"]

        import_list.each do |item|
          print "Loading #{item.split(':').last.titleize} \t".yellow
          begin
            Rake::Task["usman:import:data:dummy:#{item}"].invoke
          rescue ArgumentError => e
            puts "Loading #{item} - Failed - #{e.message}".red
          rescue Exception => e
            puts "Loading #{item} - Failed - #{e.message}".red
            puts "Backtrace:\n\t#{e.backtrace.join("\n\t")}"
          end
        end
        puts " "
      end

      ["User", "Permission"].each do |cls_name|
        name = cls_name.underscore.pluralize
        desc "Load Dummy #{cls_name.pluralize}"
        task name => :environment do
          verbose = true
          verbose = false if ["false", "f","0","no","n"].include?(ENV["verbose"].to_s.downcase.strip)

          destroy_all = false
          destroy_all = true if ["true", "t","1","yes","y"].include?(ENV["destroy_all"].to_s.downcase.strip)

          path = Rails.root.join('db', 'data', 'dummy', "#{cls_name.constantize.table_name}.csv")
          path = Usman::Engine.root.join('db', 'data', 'dummy', "#{cls_name.constantize.table_name}.csv") unless File.exists?(path)

          cls_name.constantize.destroy_all if destroy_all
          cls_name.constantize.import_data_file(path, true, verbose)
          puts "Importing Completed".green if verbose
        end
      end
    end

  end
end

end