#
#
#

import sys


def usage():
    pass


class CodeplexFormatter:

    def header1( self, s ):
        return "! " + s + "\n"

    def header2( self, s ):
        return "!! " + s + "\n"

    def header3( self, s ):
        return "!!! " + s + "\n"

    def bulletItem( self, s ):
        return "* " + s + "\n"


class ModuleInfo:

    def __init__ (self, module):
        self.funcs = sorted( [ item for item in module.__dict__.values() if type(item).__name__ == "function" ], key=lambda x: x.__name__ ) 
        self.classes = sorted( [ item for item in module.__dict__.values() if type(item).__name__ == "class" ],  key=lambda x: x.__name__ ) 


def buildDoc( ioStream, formatter, apiInfo ):
  
    ioStream.write( formatter.header2( "Functions" ) )

    for func in apiInfo.funcs:
        ioStream.write( formatter.bulletItem( func.__name__ ) )

    ioStream.write( formatter.header2( "Classes" ) )

    for cls in apiInfo.classes:
        ioStream.write( formatter.bulletItem( cls.__name__ ) )


    for func in apiInfo.funcs:
        ioStream.write( formatter.header3( func.__name__ ) )
        ioStream.write( func.__doc__ + "\n" )


    for cls in apiInfo.classes:
        ioStream.write( formatter.header3( cls.__name__ ) )	
        ioStream.write( cls.__doc__ + "\n" )



def buildFuncDir( ioStream, funcs ):
    pass

def buildClassDir( ioStream, classes ):
    pass


def main():

    if len(sys.argv) < 2:
        usage()
        return

    moduleName = sys.argv[1]

    try:

        module = __import__( moduleName )

        with file( "wiki.txt", "w" ) as wikiIo:

            apiInfo = ModuleInfo( module )

            formatter = CodeplexFormatter()

            buildDoc( wikiIo, formatter, apiInfo )         

    except ImportWarning:

        print "failed to import module " + moduleName
	

if __name__ == "__main__":
    main()