from csdr.module import PickleModule
from owrx.bands import Bandplan
from owrx.metrics import Metrics, CounterMetric
import logging

logger = logging.getLogger(__name__)


class PocsagParser(PickleModule):
    def __init__(self):
        self.band = None
        super().__init__()

    def process(self, meta):
        try:
            if "address" in meta:
                meta["address"] = int(meta["address"])
            meta["mode"] = "Pocsag"
            self.pushDecode()
            return meta
        except Exception:
            logger.exception("Exception while parsing Pocsag message")

    def setDialFrequency(self, freq: int) -> None:
        self.band = Bandplan.getSharedInstance().findBand(freq)

    def pushDecode(self):
        band = "unknown"
        if self.band is not None:
            band = self.band.getName()
        name = "digiham.decodes.{band}.pocsag".format(band=band)
        metrics = Metrics.getSharedInstance()
        metric = metrics.getMetric(name)
        if metric is None:
            metric = CounterMetric()
            metrics.addMetric(name, metric)
        metric.inc()
