#!/usr/bin/env python
#
#

__copyright__ = 'this file is in the public domain'

import sys, os, socket
vi = sys.version_info

if vi[0] < 2 or (vi[0] == 2 and vi[1] < 4):
     print "i need at least python version >= 2.4"
     os._exit(1)

for i in sys.argv:
    if os.path.isdir(i):
        os.chdir(i)
        print 'changed dir to %s' % i
        break

sys.path.insert(0, os.getcwd())

import getopt

doascii = False
dobackup = True

try:
    (options, rest) = getopt.getopt(sys.argv[1:], 'ab')
    for i, j in options:
        if i == '-a':
            doascii = True
        if i == '-b':
            dobackup = True
except getopt.GetoptError, ex:
    print str(ex)

if not doascii:
    reload(sys)
    sys.setdefaultencoding('utf-8')

sys.setcheckinterval(50)
socket.setdefaulttimeout(30)

import re

replacere = re.compile('plugs', re.M)

def upgrade06():
    if not os.path.isdir('data'):
        return
    if os.path.isdir('data.new'):
        return
    os.mkdir('data.new')
    for i in os.listdir('data'):
        f = open('data' + os.sep + i, 'r')
        fw = open('data.new/%s' % i.split(os.sep)[-1], 'w')
        data = f.read()
        f.close() 
        wdata = re.sub(replacere, r'gozerplugs.plugs', data)
        fw.write(wdata)
        fw.close()
    print 'converted data dir to data.new'

upgrade06()

from gozerbot.generic import rlog, handle_exception, die, enable_logging
from gozerbot.config import config, writeconfig
from gozerbot.bot import Bot
from gozerbot.fleet import fleet
from gozerbot.plugins import plugins
from gozerbot.backup import backup, backupstop
from gozerbot.generic import reboot
from gozerbot.eventhandler import mainhandler
from gozerbot.users import users
from gozerbot.thr import start_new_thread
from gozerbot.datadir import makedirs
from gozerbot.exit import globalshutdown
import time

makedirs()
writeconfig()
config.load()
enable_logging()
rlog(10, 'GOZERBOT', 'starting %s' % config['version'])
rlog(10, 'gozerbot', 'default encoding is %s' % sys.getdefaultencoding())

# write pid to pidfile
k = open('gozerbot.pid','w')
k.write(str(os.getpid()))
k.close()

# see if owner already has a user account if not merge otherwise add
owner = config['owneruserhost']
username = users.getname(owner)
if not username:
    if not users.merge('owner', owner):
        users.add('owner', [owner, ], perms = ['USER', 'OPER'])

# startup backup thread
if dobackup:
    start_new_thread(backup,())

# create the bot and connect
rlog(10, 'gozerbot', 'loading plugins')
plugins.regplugins()
if config['jabberenable']:
    from gozerbot.jabberbot import Jabberbot
    bot = Jabberbot('jabbermain')
    if not bot.doconnect(config['jabberhost'], config['jabberuser'], \
config['jabberpass']):
        rlog(10, 'gozerbot', "can't login with %s" % config['jabberuser'])
        os._exit(1)
else:
    bot = Bot(config['owneruserhost'])
    if not bot.connect(config['nick'], config['server'], config['port'], \
config['password'], config['ipv6']):
        rlog(10, 'gozerbot', "can't login on server %s" % config['server'])
# add to fleet
fleet.start(bot)

while 1:
    try:
        time.sleep(1)
        mainhandler.handle_one()
    except KeyboardInterrupt:
        globalshutdown()
        os._exit(0)
    except Exception, ex:
        handle_exception()
        globalshutdown()
        os._exit(0)