#!/usr/bin/env python

import sys, os, time
from os.path import basename, dirname, realpath, join, isdir

# pygtk imports
import pygtk
pygtk.require('2.0')
import gtk

"""
Three ways to run TakeNote

(1) directly from source dir
    
    pkgdir = bin_path + "../takenote"
    basedir = pkgdir
    sys.path.append(pkgdir)

    src/bin/takenote
    src/takenote/__init__.py
    src/takenote/images
    src/takenote/rc

(2) from installation location by setup.py 

    basedir = takenote.get_basedir()

    prefix/bin/takenote
    prefix/lib/python-XXX/site-packages/takenote/__init__.py
    prefix/lib/python-XXX/site-packages/takenote/images
    prefix/lib/python-XXX/site-packages/takenote/rc
    

(3) windows py2exe dir

    pkgdir = bin_path
    basedir = bin_path

    dir/takenote.exe
    dir/library.zip
    dir/images
    dir/rc

"""

try:
    # try to import from python path first
    import takenote
    
    # sucessful import, therefore we are running with (2) or (3)
    
    # attempt to use basedir for (2)
    basedir = takenote.get_basedir()
    
    if not isdir(join(basedir, "images")):
        # we must be running (3)
        basedir = dirname(realpath(sys.argv[0]))
    
except ImportError:
    # try to infer takenote lib path from program path
    pkgdir = dirname(dirname(realpath(sys.argv[0])))
    sys.path.append(pkgdir)
    import takenote
    
    # if this works we know we are running from src_path (1)
    basedir = takenote.get_basedir()

    
import takenote.gui.main_window



#=============================================================================


def main(args):

    if takenote.get_platform() == "windows":        
        show_errors = False
    else:
        show_errors = True
    no_default = False

    # parse options
    i = 1
    for i in range(1, len(args)):
        if args[i] == "--show-errors":
            show_errors = True
        elif args[i] == "--no-show-errors":
            show_errors = False
        elif args[i] == "--no-default":
            no_default = True
        elif not args[i].startswith("-"):
            args = args[i:]
            break
    else:
        args = []
    
    # start error log
    if not os.path.exists(takenote.get_user_pref_dir()):            
        os.mkdir(takenote.get_user_pref_dir())
    errorlog = open(takenote.get_user_error_log(), "a")
    if show_errors:
        pass
        #sys.stderr = takenote.TeeFileStream([sys.stderr, errorlog],
        #                                    autoflush=True)
    else:
        sys.stderr = errorlog
        

    sys.stderr.write("==============================================\n"
                     "TakeNote: %s\n" % time.asctime())
        
    # read preferences
    app = takenote.gui.TakeNote(basedir)


    if len(args) > 0:
        # open specified notebook
        app.open_notebook(args[0].rstrip("/"))        
    elif not no_default and app.pref.default_notebook != "":
        # open default notebook
        app.open_notebook(app.pref.default_notebook)
    else:
        app.show_main_window()

    gtk.main()
    


try:
    main(sys.argv)
except Exception, e:

    print e
    # flush final errors
    sys.stderr.flush()
    
