"""Tests for the PC321-TY Power Clamp Energy meter"""

from homeassistant.components.sensor import (
    STATE_CLASS_MEASUREMENT,
    STATE_CLASS_TOTAL_INCREASING,
    SensorDeviceClass,
)
from homeassistant.const import (
    UnitOfElectricCurrent,
    UnitOfElectricPotential,
    UnitOfEnergy,
    UnitOfFrequency,
    UnitOfPower,
    UnitOfTemperature,
)

from ..const import PC321TY_POWERCLAMP_PAYLOAD
from ..mixins.sensor import MultiSensorTests
from .base_device_tests import TuyaDeviceTestCase

VOLTAGE1_DP = "101"
CURRENT1_DP = "102"
POWER1_DP = "103"
PFACTOR1_DP = "104"
ENERGY1_DP = "106"
VOLTAGE2_DP = "111"
CURRENT2_DP = "112"
POWER2_DP = "113"
PFACTOR2_DP = "114"
ENERGY2_DP = "116"
VOLTAGE3_DP = "121"
CURRENT3_DP = "122"
POWER3_DP = "123"
PFACTOR3_DP = "124"
ENERGY3_DP = "126"
TOTALENERGY_DP = "131"
TOTALCURRENT_DP = "132"
TOTALPOWER_DP = "133"
FREQUENCY_DP = "135"
TEMPERATURE_DP = "136"


class TestPC321TYPowerClamp(MultiSensorTests, TuyaDeviceTestCase):
    __test__ = True

    def setUp(self):
        self.setUpForConfig(
            "pc321ty_energy_meter.yaml",
            PC321TY_POWERCLAMP_PAYLOAD,
        )
        self.setUpMultiSensors(
            [
                {
                    "dps": TOTALENERGY_DP,
                    "name": "sensor_energy",
                    "unit": UnitOfEnergy.KILO_WATT_HOUR,
                    "device_class": SensorDeviceClass.ENERGY,
                    "state_class": STATE_CLASS_TOTAL_INCREASING,
                    "testdata": (12345, 123.45),
                },
                {
                    "dps": VOLTAGE1_DP,
                    "name": "sensor_voltage_a",
                    "unit": UnitOfElectricPotential.VOLT,
                    "device_class": SensorDeviceClass.VOLTAGE,
                    "state_class": STATE_CLASS_MEASUREMENT,
                    "testdata": (2348, 234.8),
                },
                {
                    "dps": CURRENT1_DP,
                    "name": "sensor_current_a",
                    "unit": UnitOfElectricCurrent.AMPERE,
                    "device_class": SensorDeviceClass.CURRENT,
                    "state_class": STATE_CLASS_MEASUREMENT,
                    "testdata": (4567, 4.567),
                },
                {
                    "dps": POWER1_DP,
                    "name": "sensor_power_a",
                    "unit": UnitOfPower.WATT,
                    "state_class": STATE_CLASS_MEASUREMENT,
                    "device_class": SensorDeviceClass.POWER,
                },
                {
                    "dps": PFACTOR1_DP,
                    "name": "sensor_power_factor_a",
                    "device_class": SensorDeviceClass.POWER_FACTOR,
                    "state_class": STATE_CLASS_MEASUREMENT,
                    "testdata": (5000, 50.00),
                },
                {
                    "dps": ENERGY1_DP,
                    "name": "sensor_energy_a",
                    "unit": UnitOfEnergy.KILO_WATT_HOUR,
                    "testdata": (12345, 123.45),
                },
                {
                    "dps": VOLTAGE2_DP,
                    "name": "sensor_voltage_b",
                    "unit": UnitOfElectricPotential.VOLT,
                    "device_class": SensorDeviceClass.VOLTAGE,
                    "state_class": STATE_CLASS_MEASUREMENT,
                    "testdata": (2348, 234.8),
                },
                {
                    "dps": CURRENT2_DP,
                    "name": "sensor_current_b",
                    "unit": UnitOfElectricCurrent.AMPERE,
                    "device_class": SensorDeviceClass.CURRENT,
                    "state_class": STATE_CLASS_MEASUREMENT,
                    "testdata": (4567, 4.567),
                },
                {
                    "dps": POWER2_DP,
                    "name": "sensor_power_b",
                    "unit": UnitOfPower.WATT,
                    "device_class": SensorDeviceClass.POWER,
                    "state_class": STATE_CLASS_MEASUREMENT,
                },
                {
                    "dps": PFACTOR2_DP,
                    "name": "sensor_power_factor_b",
                    "device_class": SensorDeviceClass.POWER_FACTOR,
                    "state_class": STATE_CLASS_MEASUREMENT,
                    "testdata": (5000, 50.00),
                },
                {
                    "dps": ENERGY2_DP,
                    "name": "sensor_energy_b",
                    "unit": UnitOfEnergy.KILO_WATT_HOUR,
                    "testdata": (12345, 123.45),
                },
                {
                    "dps": VOLTAGE3_DP,
                    "name": "sensor_voltage_c",
                    "unit": UnitOfElectricPotential.VOLT,
                    "device_class": SensorDeviceClass.VOLTAGE,
                    "state_class": STATE_CLASS_MEASUREMENT,
                    "testdata": (2348, 234.8),
                },
                {
                    "dps": CURRENT3_DP,
                    "name": "sensor_current_c",
                    "unit": UnitOfElectricCurrent.AMPERE,
                    "device_class": SensorDeviceClass.CURRENT,
                    "state_class": STATE_CLASS_MEASUREMENT,
                    "testdata": (4567, 4.567),
                },
                {
                    "dps": POWER3_DP,
                    "name": "sensor_power_c",
                    "unit": UnitOfPower.WATT,
                    "state_class": STATE_CLASS_MEASUREMENT,
                    "device_class": SensorDeviceClass.POWER,
                },
                {
                    "dps": PFACTOR3_DP,
                    "name": "sensor_power_factor_c",
                    "device_class": SensorDeviceClass.POWER_FACTOR,
                    "state_class": STATE_CLASS_MEASUREMENT,
                    "testdata": (5000, 50.00),
                },
                {
                    "dps": ENERGY3_DP,
                    "name": "sensor_energy_c",
                    "unit": UnitOfEnergy.KILO_WATT_HOUR,
                    "testdata": (12345, 123.45),
                },
                {
                    "dps": TOTALCURRENT_DP,
                    "name": "sensor_total_current",
                    "unit": UnitOfElectricCurrent.AMPERE,
                    "device_class": SensorDeviceClass.CURRENT,
                    "state_class": STATE_CLASS_MEASUREMENT,
                    "testdata": (12345, 12.345),
                },
                {
                    "dps": TOTALPOWER_DP,
                    "name": "sensor_total_active_power",
                    "unit": UnitOfPower.WATT,
                    "state_class": STATE_CLASS_MEASUREMENT,
                    "device_class": SensorDeviceClass.POWER,
                },
                {
                    "dps": FREQUENCY_DP,
                    "name": "sensor_frequency",
                    "unit": UnitOfFrequency.HERTZ,
                    "state_class": STATE_CLASS_MEASUREMENT,
                    "device_class": SensorDeviceClass.FREQUENCY,
                },
                {
                    "dps": TEMPERATURE_DP,
                    "name": "sensor_temperature",
                    "unit": UnitOfTemperature.CELSIUS,
                    "device_class": SensorDeviceClass.TEMPERATURE,
                    "state_class": STATE_CLASS_MEASUREMENT,
                    "testdata": (234, 23.4),
                },
            ]
        )
        self.mark_secondary(
            [
                "sensor_voltage_a",
                "sensor_current_a",
                "sensor_power_a",
                "sensor_power_factor_a",
                "sensor_energy_a",
                "sensor_voltage_b",
                "sensor_current_b",
                "sensor_power_b",
                "sensor_power_factor_b",
                "sensor_energy_b",
                "sensor_voltage_c",
                "sensor_current_c",
                "sensor_power_c",
                "sensor_power_factor_c",
                "sensor_energy_c",
                "sensor_total_current",
                "sensor_total_active_power",
                "sensor_frequency",
                "sensor_temperature",
            ]
        )
