namespace :simplexml do

desc 'Parse all SimpleXml files in a directory'
task :parse_all, [:source_dir] do |t, args|

  source_dir = args.source_dir
  outdir = File.join('tmp','parsed')
  FileUtils.rm_r outdir if File.exist? outdir
  FileUtils.mkdir_p outdir

  Dir.glob(File.join(source_dir, '*.xml')).each do |file|
    puts "####################################"
    puts "### processing: #{file}..."
    puts "####################################"

    measure = SimpleXml::Parser::V1Parser.new.parse(File.read(file))
    outfile = File.join(outdir, "#{measure.cms_id}.json")
    File.open(outfile, 'w') {|f| f.write(JSON.pretty_generate(measure.to_json)) }
    puts "Wrote: #{outfile}\n"
  end

end

desc 'Parse a SimpleXml file'
task :parse, [:file] do |t, args|

  file = args.file
  outdir = File.join('tmp','parsed')
  FileUtils.rm_r outdir if File.exist? outdir
  FileUtils.mkdir_p outdir

  puts "####################################"
  puts "### processing: #{file}..."
  puts "####################################"

  measure = SimpleXml::Parser::V1Parser.new.parse(File.read(file))
  outfile = File.join(outdir, "#{measure.cms_id}.json")
  File.open(outfile, 'w') {|f| f.write(JSON.pretty_generate(measure.to_json)) }
  puts "Wrote: #{outfile}\n"

end

desc 'Convert SimpleXml To HQMF R2.1'
task :convert, [:file] do |t, args|
  model = SimpleXml::Parser::V1Parser.new.parse(File.open(args.file).read)
  # clear out the attributes... we don't have the correct mappings for those
  model.instance_variable_set(:@attributes, [])
  hqmf_xml = HQMF2::Generator::ModelProcessor.to_hqmf(model)
  outdir = File.join('tmp','hqmf_r2')
  FileUtils.mkdir_p outdir

  outfile = File.join(outdir,"#{model.cms_id}_hqmf_r2.xml")
  File.open(outfile, 'w') { |file | file.write(make_xml_pretty(hqmf_xml)) }
  puts "Wrote HQMF R2.1 XML to: #{outfile}"
end

def make_xml_pretty(xml_content)
  require "rexml/document"
  doc = REXML::Document.new xml_content
  out = ""
  doc.write(out, 2)
  out
end

end