namespace :tax_cloud do

desc 'Generate tax code groups.'
task tax_code_groups: :configure do
  filename = 'lib/tax_cloud/tax_code_group_constants.rb'

  begin
    groups = TaxCloud::TaxCode::Groups.all.values

    File.open filename, 'wt' do |f|
      f.write "module TaxCloud\n"
      f.write "  class TaxCode\n"
      f.write "    # Tax Code Groups.\n"
      f.write "    class Groups\n"

      groups.each do |group|
        puts " #{group.description}"
        code = group.description.upcase
        code.gsub! /[^A-Z0-9]/, '_'
        code.gsub! /_$/, ''
        code.gsub! /\_+/, '_'
        f.write "      \# #{group.description}\n"
        f.write "      #{code} = #{group.group_id}\n"
      end

      f.write "    end\n"
      f.write "  end\n"
      f.write "end\n"
    end

    puts "Done, #{filename}."
  rescue => e
    puts 'ERROR: Unable to generate a new list of tax codes.'
    puts e.message
    raise e
  end
end

end