import math

import weewx
import weewx.units
weewx.units.obs_group_dict['outWetBulb'] = "group_temperature"

from weewx.engine import StdService

class outWetBulbService(StdService):

    def __init__(self, engine, config_dict):
        super(outWetBulbService, self).__init__(engine, config_dict)

        self.bind(weewx.NEW_ARCHIVE_RECORD, self.new_archive_record)

    def new_archive_record(self, event):
        if event.record.get('outTemp') is not None and event.record.get('outHumidity') is not None and event.record.get('barometer') is not None:
            if event.record.get('usUnits') == weewx.US:
                tempC = (event.record.get('outTemp') - 32.0) / 1.8
                pressmb = event.record.get('barometer') / 0.0295299875
                owb = tempC * (0.45 + 0.006 * event.record.get('outHumidity') * math.sqrt(pressmb / 1060))
                event.record['outWetBulb'] = owb * 1.8 + 32.0
            else:
                event.record['outWetBulb'] = event.record.get('outTemp') * (0.45 + 0.006 * event.record.get('outHumidity') * math.sqrt(event.record.get('barometer') / 1060))
        else:
            event.record['outWetBulb'] = None