#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""par2mv tool"""

import sys
import os
import optparse
import shutil
from par2ools import par2
from glob import glob

USAGE="%prog [opts] par2file dest"
VERSION=(0,1)

def list_file(filename):
    f = par2.Par2File(filename)
    return f.filenames()

def baseglob(pat, base):
    return [f for f in glob(pat) if f.startswith(base)]

def related_par2s(filename):
    names = [filename]
    name_base = filename.rsplit('.', 1)[0]
    alts = baseglob("*.vol*.par2", name_base)
    alts += baseglob("*.vol*.PAR2", name_base)
    alts += baseglob("*.VOL*.PAR2", name_base)
    alts += baseglob("*.VOL*.par2", name_base)
    return list(sorted(names + alts))

def main():
    opts, args = parse_args()
    par2file, dest = args
    filenames = list_file(par2file)
    if opts.par2:
        filenames += related_par2s(par2file)
    if not os.path.isdir(dest):
        os.makedirs(dest)
    for path in filenames:
        shutil.move(path, dest)
        if opts.verbose:
            print "%s => %s" % (path, dest)

def parse_args():
    parser = optparse.OptionParser(usage=USAGE, version='.'.join(map(str,VERSION)))
    parser.add_option('-p', '--par2', action='store_true', help='include related par2 archives')
    parser.add_option('-v', '--verbose', action='store_true', help='print which files go where')
    opts, args = parser.parse_args()
    if len(args) != 2:
        print "Error: must provide a par2file and a destination"
    return opts, args


if __name__ == '__main__':
    try:
        sys.exit(main() or 0)
    except KeyboardInterrupt:
        sys.exit(-1)


