#!/usr/bin/python

import sys
import traceback

from optparse import OptionParser
from Tartarus.system import Error
from Tartarus.deploy.common import Failure, Wizard
import Tartarus.deploy.leave

def _main():
    parser = OptionParser()
    parser.add_option("-f", "--force", action="store_true", dest="force", default=False,
                      help="force leave from Tartarus domain")

    (options, args) = parser.parse_args()

    w = Wizard()
    msg = 'Do you really want to leave Tartarus Domain?'
    if options.force or w.dialog.yesno(msg, False):
        w.opts = {}
        w.run('leave')
    else:
        return "Aborted.\n"

def _format_exception():
    et, ev, _  = sys.exc_info()

    if et is Error:
        msg = ev.message
        code = -1
    elif et is Failure:
        msg = ev.message
        code = -1
    elif et is OSError:
        code =  ev.errno
        msg = "OS Error: %s" % ev.strerror
    else:
        code =  -1
        msg = str().join(traceback.format_exception(et, ev, None))

    if not msg.endswith('\n'):
        msg += '\n'

    return (code, msg)

def main():
    try:
        msg = _main()
        if msg:
            sys.stdout.write(msg)
        sys.exit(0)
    except KeyboardInterrupt:
        msg = "\n\nDeployment canceled!\n"
        code = -1
    except Error:
        code, msg = _format_exception()
    except Failure:
        code, msg = _format_exception()
    except Exception:
        traceback.print_exc()
        code, msg = _format_exception()
    sys.stderr.write(msg)
    sys.exit(code)

if __name__ == '__main__':
    main()
