#!/usr/bin/ruby
# vi: ts=2 sw=2

require 'getoptlong'
require 'philesight'
require 'set'

opts = GetoptLong.new(
	[ "--index",           "-i", GetoptLong::REQUIRED_ARGUMENT ],
	[ "--draw",	           "-d", GetoptLong::REQUIRED_ARGUMENT ],
	[ "--path",	           "-p", GetoptLong::REQUIRED_ARGUMENT ],
	[ "--db",              "-D", GetoptLong::REQUIRED_ARGUMENT ],
	[ "--skip",            "-S", GetoptLong::REQUIRED_ARGUMENT ],
	[ "--dump",	           "-u", GetoptLong::NO_ARGUMENT       ],
	[ "--one-file-system", "-1", GetoptLong::NO_ARGUMENT       ],
	[ "--only-dirs",       "-o", GetoptLong::NO_ARGUMENT       ],
	[ "--help",            "-h", GetoptLong::NO_ARGUMENT       ]
)

def usage
	puts
	puts "usage: philesight <options>"
	puts
	puts "Options:"
	puts "  --db <db>          Set path to database file"
	puts "  --draw <fname>     Save PNG image to <fname>"
	puts "  --path <path>      Path to show in generated image"
	puts "  --index <path>     Top-level directory to start indexing"
	puts "  --dump             Dump database to readable format"
	puts "  --one-file-system  Skip mount points"
	puts "  --only-dirs        Index only directory totals, use to decrease index size"
	puts "  --skip <path>      Skip given filename in index mode"
	puts
	puts "Examples:"
	puts "  Index to database:   philesight --db <db> --index <path>"
	puts "  Generate PNG:        philesight --db <db> --path <path> --draw <png>"
	puts
end


t = Philesight.new

#
# Parse command line arguments
#

mode = nil
arg_db = nil
arg_one_fs = nil
arg_index_dir = ""
arg_path = ""
arg_skip = Set.new
arg_drawfile = ""
arg_only_dirs = false


opts.each do |opt, arg|

	case opt
	
	when "--db"
		arg_db = arg

	when "--draw"
		mode = "draw"
		arg_drawfile = arg
	
	when "--index"
		mode = "index"
		arg_index_dir = arg

	when "--skip"
		arg_skip << arg.chomp('/')

	when "--one-file-system"
		arg_one_fs = true

	when "--path"
		arg_path = arg

	when "--dump"
		mode = "dump"

	when "--only-dirs"
		arg_only_dirs = true

	else
		usage

	end
end

#
# Open database
#

if arg_db then
	t.db_open(arg_db)
else
	puts "No --db option given"
	usage()
	exit 1
end

# 
# Perform requested action
#

case mode

	when "draw"
		t.draw(arg_path, arg_drawfile)

	when "dump"
		t.dump()

	when "index"
		t.index(arg_index_dir, arg_skip, arg_one_fs, arg_only_dirs)

	else
		usage()

end

# 
# End
# 
