require 'pathname' require 'fileutils'

namespace :hqmf do

desc 'Convert a HQMF file to JavaScript'
task :convert, [:hqmf,:hqmf_version] do |t, args|

  raise "The path to the the hqmf xml must be specified" unless args.hqmf

  FileUtils.mkdir_p File.join(".","tmp",'js')
  file = File.expand_path(args.hqmf)
  version = args.hqmf_version || HQMF::Parser::HQMF_VERSION_1

  filename = Pathname.new(file).basename
  if (version == HQMF::Parser::HQMF_VERSION_1)
    doc = HQMF::Parser::V1Parser.new.parse(File.open(file).read, version)
  else
    doc = HQMF::Parser::V2Parser.new.parse(File.open(file).read, version)
  end

  gen = HQMF2JS::Generator::JS.new(doc)

  out_file = File.join(".","tmp",'js',"#{filename}.js")

  File.open(out_file, 'w') do |f|

    f.write("// #########################\n")
    f.write("// ##### DATA CRITERIA #####\n")
    f.write("// #########################\n\n")
    f.write(gen.js_for_data_criteria())

    f.write("// #########################\n")
    f.write("// ##### POPULATION CRITERIA #####\n")
    f.write("// #########################\n\n")

    f.write("// INITIAL PATIENT POPULATION\n")
    f.write(gen.js_for(HQMF::PopulationCriteria::IPP))
    f.write("\n// DENOMINATOR\n")
    f.write(gen.js_for(HQMF::PopulationCriteria::DENOM))
    f.write("\n// NUMERATOR\n")
    f.write(gen.js_for(HQMF::PopulationCriteria::NUMER))
    f.write("\n// NUMERATOR EXCLUSIONS\n")
    f.write(gen.js_for(HQMF::PopulationCriteria::NUMEX))
    f.write("\n// EXCLUSIONS\n")
    f.write(gen.js_for(HQMF::PopulationCriteria::DENEX))
    f.write("\n// DENOMINATOR EXCEPTIONS\n")
    f.write(gen.js_for(HQMF::PopulationCriteria::DENEXCEP))
    f.write("\n// MSRPOPL\n")
    f.write(gen.js_for(HQMF::PopulationCriteria::MSRPOPL))
    f.write("\n// OBSERV\n")
    f.write(gen.js_for(HQMF::PopulationCriteria::OBSERV))
    f.write("\n// MSRPOPLEX\n")
    f.write(gen.js_for(HQMF::PopulationCriteria::MSRPOPLEX))
  end

  puts "wrote javascript to: #{out_file}"

end

end