#!/usr/bin/env ruby

require 'optparse'
require 'xtmfile/header'

module XtmFile
	class XtmInfo
		class XtmInfoArgumentError < ArgumentError ; end

		attr_reader :opts


		def initialize args
			@args = []
			@input_xtm = nil
			parse_command_line args	
		end

		def parse_command_line args
			@args = args.clone
			@opts = OptionParser.new do |opts|
				opts.banner = "Usage: #{File.basename $0} [options]\n"

				opts.separator ""
				opts.separator "Mandatory options"

				opts.on("-i", "--input FILE", "Input XTM file") do |r|
					@input_xtm = r
				end

				opts.separator ""
				opts.separator "General options:"

				opts.on("-h", "--help", "Show this help") do |h|
					@help = h
				end
				opts.on("-v", "--verbose", "Show warnings too") do |v|
					@verbose = v
				end
				opts.separator ""
			end
		end

		def validate!
			@opts.parse!

			raise XtmInfoArgumentError, "No input XTM file specified!" if @input_xtm.nil?
		end


		def run
			validate!

			File.open( @input_xtm, "rb" ) do |io|
				header = Header::read io
				puts header.to_summary_string
			end
		end

		def self.main args
			xj = nil
			begin
				xj = XtmInfo.new args
				xj.run
				exit 0
			rescue XtmInfoArgumentError => e
				STDERR.puts "%s" % xj.opts
				STDERR.puts "error: %s" % e.message

				exit 1
			rescue SystemExit => e
				raise e
			rescue Exception => e
				STDERR.puts "error: %s" % e.message
				STDERR.puts e.backtrace
				exit 1
			end
		end
	end
end

XtmFile::XtmInfo.main ARGV