#!/usr/bin/python3

# FIXME: apparmor package from apparmor-utils is not a namespace package
import apparmor
from apparmor import click
import json
import optparse
import os
import sys

#def set_default_values():
#    values = dict()
#    values

def main():
    def usage():
        '''Return usage information'''
        return 'USAGE: %s [options] <path to click manifest>' % \
                       os.path.basename(sys.argv[0])

    parser = optparse.OptionParser()
    # should default to /etc/apparmor or wherever we install click
    # profiles
    parser.add_option("-d", "--directory",
                      dest='directory',
                      help='directory to install profiles into',
                      metavar="DIR",
                      default=None)
    parser.add_option("-s", "--skip-profile-load",
                      dest='skipload',
                      help="skip loading profiles",
                      action='store_true',
                      default=False)
    (opt, args) = parser.parse_args()

    if len(args) == 1:
        infile = args[0]
    else:
        error(usage())

    try:
        f = open(infile, "r")
        clickjson = json.load(f)
    except IOError as e:
        error("unable to read manifest '%s': %s" %(infile, e))
    except ValueError as e:
        error("manifest '%s' json error: %s" %(infile, e))

    profiles = apparmor.click.to_profiles(clickjson, directory=opt.directory)

    # if passed a directory to write to, load profiles
    # if directory wasn't set, output went to stdout
    if opt.directory and not opt.skipload:
        apparmor.click.load_profiles(profiles)

    return 0

if __name__ == "__main__":
    sys.exit(main())
