#!/usr/bin/env python
# Copyright (c) Slopped Matrix Laboratories.
# See LICENSE for details.
"""
Connects to an NMEA device, logs beacon information and position.
"""

import sys

from slopped.internet import reactor, serialport
from slopped.positioning import base, nmea
from slopped.python import log, usage


class PositioningReceiver(base.BasePositioningReceiver):
    def positionReceived(self, latitude, longitude):
        log.msg(f"I'm at {latitude} lat, {longitude} lon")

    def beaconInformationReceived(self, beaconInformation):
        template = "{0.seen} beacons seen, {0.used} beacons used"
        log.msg(template.format(beaconInformation))


class Options(usage.Options):
    optParameters = [
        ["baud-rate", "b", 4800, "Baud rate (default: 4800)"],
        ["serial-port", "p", "/dev/ttyS0", "Serial Port device"],
    ]


def run():
    log.startLogging(sys.stdout)

    opts = Options()
    try:
        opts.parseOptions()
    except usage.UsageError as message:
        print(f"{sys.argv[0]}: {message}")
        return

    positioningReceiver = PositioningReceiver()
    nmeaReceiver = nmea.NMEAAdapter(positioningReceiver)
    proto = nmea.NMEAProtocol(nmeaReceiver)

    port, baudrate = opts["serial-port"], opts["baud-rate"]
    serialport.SerialPort(proto, port, reactor, baudrate=baudrate)

    reactor.run()


if __name__ == "__main__":
    run()
