#!/usr/bin/python

import sys
from os.path import exists, join, dirname
from tempfile import NamedTemporaryFile
from subprocess import Popen

from logilab.common.configuration import Configuration

from yams.__pkginfo__ import version
from yams import schema2dot
from yams.reader import SchemaLoader

from cubicweb.schema import CubicWebSchemaLoader as SchemaLoader

options = [('output-file', {'type':'file', 'default': None,
             'metavar': '<file>', 'short':'o', 'help':'output image file'}),
           ('viewer', {'type': 'string', 'default':"rsvg-view", 'short': "w", 'metavar':'<cmd>',
             'help':'command use to view the generated file (empty for none)'}),
           ('lib-dir', {'type': 'string', 'short': "L", 'metavar':'<dir>',
             'help':'directory to look for schema dependancies'}),
          ]

config = Configuration(options=options,
    usage="yams-view [-L <lib_dir> | [[[...] deps] deps]] apps",
    version=version)
dirnames = config.load_command_line_configuration()

lib_dir = config['lib-dir']
assert lib_dir is not None
if lib_dir is not None:
    app_dir = dirnames[-1]
    from ginco.erudiconfig import ErudiConfiguration as ErudiConfig
    import ginco.erudiconfig
    print ginco.erudiconfig.__file__
    packages = ErudiConfig.expand_packages(dirnames)
    packages = ErudiConfig.reorder_packages(packages)
    print packages
    packages = [ pkg for pkg in packages if pkg != app_dir]
elif False:
    glob = globals().copy()
    execfile(join(app_dir,"__pkginfo__.py"), glob)
    #dirnames = [ join(lib_dir,dep) for dep in glob['__use__']]+dirnames
    packages = [ dep for dep in glob['__use__']]


for dir in dirnames:
    assert exists(dir), dir

import ginco
ginco_dir = dirname(ginco.__file__)

schm_ldr = SchemaLoader()
#schm_ldr.load(join(ginco_dir,"common"))
#schm_ldr._instantiate_handlers()
#schm_ldr.defined = {}
#schm_ldr.load([])
#import ginco.common.schema
#for schema in ("base","Bookmark","bootstrap","Card"):
#    schm_ldr.handle_file(join(ginco_dir,"schemas",schema+".py"))

class MockConfig():
    def packages(self):
        return packages
    def packages_path(self):
        return packages
    def schemas_lib_dir(self):
        return join(ginco_dir,"schemas")
    #def apphome(self):
    #    return lib_dir
    apphome = dirnames[0]
    def appid(self):
        "bob"

print MockConfig().packages()

schema = schm_ldr.load(MockConfig())


out, viewer = config['output-file'], config['viewer']
if out is None:
    tmp_file = NamedTemporaryFile(suffix=".svg")
    out = tmp_file.name
schema2dot.schema2dot(schema, out, #size=size,
    skiprels=("identity",), skipentities=("Person","AbstractPerson","Card","AbstractCompany","Company","Division"))
if viewer:
    p = Popen((viewer, out))
    p.wait()
