#!/usr/bin/python
#
# Copyright (C) 2005, TUBITAK/UEKAE
#
# This program is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free
# Software Foundation; either version 2 of the License, or (at your option)
# any later version.
#
# Please read the COPYING file.
#

import sys
import locale
import traceback
import exceptions

import pisi.ui
import pisi.context as ctx
from pisi.cli.pisicli import PisiCLI

import gettext
__trans = gettext.translation('pisi', fallback=True)
_ = __trans.ugettext

def exit():
    pisi.api.finalize()
    sys.exit(1)

def handle_exception(exception, value, tb):

    ui = pisi.cli.CLI() # make a temporary UI
    show_traceback = False
    if exception == exceptions.KeyboardInterrupt:
        ui.error(_("Keyboard Interrupt: Exiting..."))
        exit()
    elif isinstance(value, pisi.Error):
        ui.error(_("Program Terminated."))
        show_traceback = ctx.get_option('debug')
    elif isinstance(value, pisi.Exception):
        show_traceback = True
        ui.error(_("""Unhandled internal exception.
Please file a bug report. (http://bugs.uludag.org.tr)"""))
    else:
        # For any other exception (possibly Python exceptions) show
        # the traceback!
        show_traceback = ctx.get_option('debug')
        ui.error(_("System Error. Program Terminated."))

    v = ''
    for e in value.args:
        v += str(e) + '\n'

    if ctx.get_option('debug'):
        ui.error("%s: %s" % (exception, v))
    else:
         ui.error(v)

    ui.info(_("Please use 'pisi help' for general help."))

    if show_traceback:
        ui.info(_("Traceback:"))
        traceback.print_tb(tb)
    else:
        ui.info(_("Use --debug to see a traceback."))

    exit()

if __name__ == "__main__":
   
    sys.excepthook = handle_exception

    locale.setlocale(locale.LC_ALL, '')
    cli = PisiCLI()
    cli.run_command()
