#!/usr/bin/env python
#FIXME Add license

from zipfile import ZipFile

def generateOar(output, files=[]):
    # Note this is not a compressed zip
    with ZipFile(output, 'w') as zip:
        for file, mvnCoords in files:
            filename = file.split('/')[-1]
            if mvnCoords == 'NONE':
                dest = filename
            else:
                parts = mvnCoords.split(':')
                if len(parts) > 3:
                    parts.insert(2, parts.pop()) # move version to the 3rd position
                groupId, artifactId, version = parts[0:3]
                groupId = groupId.replace('.', '/')
                extension = filename.split('.')[-1]
                if extension == 'jar':
                    filename = '%s-%s.jar' % ( artifactId, version )
                elif 'features.xml' in filename:
                    filename = '%s-%s-features.xml' % ( artifactId, version )
                dest = '%s/%s/%s/%s' % ( groupId, artifactId, version, filename )
            zip.write(file, dest)

if __name__ == '__main__':
    import sys

    if len(sys.argv) < 2:
        print 'USAGE'
        sys.exit(1)

    output = sys.argv[1]
    args = sys.argv[2:]

    if len(args) % 2 != 0:
        print 'There must be an even number of args: file mvn_coords'
        sys.exit(2)

    files = zip(*[iter(args)]*2)
    generateOar(output, files)
