# Path: mppsolar/outputs/baseoutput.py
# class baseoutput:
#     def __str__(self):
#         return "the base class for the output processors, not used directly"
# 
# Path: mppsolar/helpers.py
# def get_kwargs(kwargs, key, default=None):
#     if key not in kwargs or not kwargs[key]:
#         return default
#     return kwargs[key]
# 
# Path: mppsolar/helpers.py
# def key_wanted(key, filter=None, excl_filter=None):
#     # remove any specifically excluded keys
#     if excl_filter is not None and excl_filter.search(key):
#         # log.debug(f"key_wanted: key {key} matches excl_filter {excl_filter} so key excluded")
#         return False
#     if filter is None:
#         # log.debug(
#         #    f"key_wanted: No filter and key {key} not excluded by excl_filter {excl_filter} so key wanted"
#         # )
#         return True
#     elif filter.search(key):
#         # log.debug(
#         #    f"key_wanted: key {key} matches filter {filter} and not excl_filter {excl_filter} so key wanted"
#         # )
#         return True
#     else:
#         # log.debug(f"key_wanted: key {key} does not match filter {filter} so key excluded")
#         return False


import logging
import re
import paho.mqtt.publish as publish
from .baseoutput import baseoutput
from ..helpers import get_kwargs
from ..helpers import key_wanted


log = logging.getLogger("mqtt")


class mqtt(baseoutput):
    def __str__(self):
        return "outputs the results to the supplied mqtt broker: eg {tag}/status/total_output_active_power/value 1250"

    def __init__(self, *args, **kwargs) -> None:
        log.debug(f"__init__: kwargs {kwargs}")

    def build_msgs(self, *args, **kwargs):
        data = get_kwargs(kwargs, "data")
        tag = get_kwargs(kwargs, "tag")
        keep_case = get_kwargs(kwargs, "keep_case")
        # Build array of mqtt messages
        msgs = []
        # Remove command and _command_description
        cmd = data.pop("_command", None)
        data.pop("_command_description", None)
        data.pop("raw_response", None)
        filter = get_kwargs(kwargs, "filter")
        if filter is not None:
            filter = re.compile(filter)

# Path: mppsolar/outputs/baseoutput.py
# class baseoutput:
#     def __str__(self):
#         return "the base class for the output processors, not used directly"
# 
# Path: mppsolar/helpers.py
# def get_kwargs(kwargs, key, default=None):
#     if key not in kwargs or not kwargs[key]:
#         return default
#     return kwargs[key]
# 
# Path: mppsolar/helpers.py
# def key_wanted(key, filter=None, excl_filter=None):
#     # remove any specifically excluded keys
#     if excl_filter is not None and excl_filter.search(key):
#         # log.debug(f"key_wanted: key {key} matches excl_filter {excl_filter} so key excluded")
#         return False
#     if filter is None:
#         # log.debug(
#         #    f"key_wanted: No filter and key {key} not excluded by excl_filter {excl_filter} so key wanted"
#         # )
#         return True
#     elif filter.search(key):
#         # log.debug(
#         #    f"key_wanted: key {key} matches filter {filter} and not excl_filter {excl_filter} so key wanted"
#         # )
#         return True
#     else:
#         # log.debug(f"key_wanted: key {key} does not match filter {filter} so key excluded")
#         return False


# Path: mppsolar/outputs/mqtt.py
import logging
import re
import paho.mqtt.publish as publish
from .baseoutput import baseoutput
from ..helpers import get_kwargs
from ..helpers import key_wanted



log = logging.getLogger("mqtt")


class mqtt(baseoutput):
    def __str__(self):
        return "outputs the results to the supplied mqtt broker: eg {tag}/status/total_output_active_power/value 1250"

    def __init__(self, *args, **kwargs) -> None:
        log.debug(f"__init__: kwargs {kwargs}")

    def build_msgs(self, *args, **kwargs):
        data = get_kwargs(kwargs, "data")
        tag = get_kwargs(kwargs, "tag")
        keep_case = get_kwargs(kwargs, "keep_case")
        # Build array of mqtt messages
        msgs = []
        # Remove command and _command_description
        cmd = data.pop("_command", None)
        data.pop("_command_description", None)
        data.pop("raw_response", None)
        filter = get_kwargs(kwargs, "filter")
        if filter is not None:
            filter = re.compile(filter)

        excl_filter = get_kwargs(kwargs, "excl_filter")