using OnlinePCA
using ArgParse:
    ArgParseSettings, parse_args, @add_arg_table!

# options
function parse_commandline()
    s = ArgParseSettings()

    @add_arg_table! s begin
        "--binfile", "-b"
        help = "input file (serialized)"
        arg_type = AbstractString
        required = true
        "--outdir", "-o"
        help = "output directory"
        arg_type = AbstractString
        default = "."
        required = false
        "--pseudocount", "-p"
        help = "log10(exp + pseudocount)"
        arg_type = Union{Number,AbstractString}
        default = 1.0f0
        "--mode", "-m"
        help = "'dense' or 'sparse_mm' can be specified."
        arg_type = AbstractString
        default = "dense"
    end

    return parse_args(s)
end

# main
function main()
    parsed_args = parse_commandline()
    println("Parsed args:")
    for (arg, val) in parsed_args
        println("  $arg  =>  $val")
    end

    if parsed_args["pseudocount"] == 1.0f0
        pseudocount = 1.0f0
    else
        pseudocount = parse(Float32, parsed_args["pseudocount"])
    end

    OnlinePCA.sumr(binfile=parsed_args["binfile"], outdir=parsed_args["outdir"], pseudocount=pseudocount, mode=parsed_args["mode"])
end

main()