#!/usr/bin/env python
"""
  IRC connection manager (bouncer).
"""
from sys import stdout

from twisted.internet import reactor
from twisted.python import log
from twisted.python.logfile import DailyLogFile
from twisted.words.protocols import irc

from pnc.config import config

# Add some numerics that twisted is missing
irc.symbolic_to_numeric['RPL_STATSCONN'] = '250'
irc.symbolic_to_numeric['RPL_LUSERSC'] = '265'
irc.symbolic_to_numeric['RPL_LUSERSG'] = '266'
irc.symbolic_to_numeric['RPL_MOTD_ALT1'] = '377'
irc.symbolic_to_numeric['RPL_MOTD_ALT2'] = '378'

irc.numeric_to_symbolic = {}
for k, v in irc.symbolic_to_numeric.items():
    irc.numeric_to_symbolic[v] = k


if __name__ == '__main__':
    from pnc.upstreams.irc.factory import PNCClientFactory
    from pnc.downstreams.irc.factory import PNCServerFactory

    # Setup logging
    log.startLogging(stdout)
    log.startLogging(DailyLogFile.fromFullPath('pnc.log'))

    # Build our factories.
    downstream = PNCServerFactory()
    upstream = PNCClientFactory()

    # Setup and start our reactor
    reactor.listenTCP(config.downstream_port, downstream)
    reactor.connectTCP(config.upstream_host, config.upstream_port, upstream)
    reactor.run()
