#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
    Bundle a Plugin
    ~~~~~~~~~~~~~~~

    This script creates a .plugin file from a plugin installed in
    the given Zine instance (which usually is a development
    instance of Zine).

    The file created can be used to distribute the plugin.

    :copyright: (c) 2009 by the Zine Team, see AUTHORS for more details.
    :license: BSD, see LICENSE for more details.
"""
import sys
from os.path import isdir, join, dirname
from optparse import OptionParser


sys.path.append(dirname(__file__))
from _init_zine import find_instance


def main():
    parser = OptionParser(usage='%prog [options] plugin [output-file]')
    parser.add_option('--instance', '-I', dest='instance',
                      help='Use the path provided as Zine instance.')
    parser.add_option('--dont-compile', '-N', default=False,
                      action='store_true',
                      help="don't compile available plugin translations")
    options, args = parser.parse_args()
    if len(args) not in (1, 2):
        parser.error('incorrect number of arguments')
    instance = options.instance or find_instance()
    if instance is None:
        parser.error('instance not found.  Specify path to instance')

    import zine
    try:
        plugin = zine.setup(instance).plugins[args[0]]
    except KeyError:
        parser.error('Plugin not found')

    output_filename = None
    if len(args) == 2:
        output_filename = args[1]

    if output_filename is None or isdir(output_filename):
        plugin_filename = '%s-%s.plugin' % (
            plugin.filesystem_name,
            plugin.version
        )
        if output_filename is not None:
            output_filename = join(output_filename, plugin_filename)
        else:
            output_filename = plugin_filename
    elif not output_filename.endswith('.plugin'):
            output_filename += '.plugin'

    if not options.dont_compile:
        from subprocess import call
        compile_script = join(dirname(__file__), 'compile-translations')
        call([compile_script, plugin.path, '-s'])

    plugin.dump(output_filename)
    print 'Plugin written to %s' % output_filename


if __name__ == '__main__':
    main()
