import esphome.codegen as cg
from esphome.components import ble_client, climate
import esphome.config_validation as cv
from esphome.const import CONF_ID, CONF_UNIT_OF_MEASUREMENT

UNITS = {
    "f": "f",
    "c": "c",
}

CODEOWNERS = ["@buxtronix"]
DEPENDENCIES = ["ble_client"]

anova_ns = cg.esphome_ns.namespace("anova")
Anova = anova_ns.class_(
    "Anova", climate.Climate, ble_client.BLEClientNode, cg.PollingComponent
)

CONFIG_SCHEMA = (
    climate.CLIMATE_SCHEMA.extend(
        {
            cv.GenerateID(): cv.declare_id(Anova),
            cv.Required(CONF_UNIT_OF_MEASUREMENT): cv.enum(UNITS),
        }
    )
    .extend(ble_client.BLE_CLIENT_SCHEMA)
    .extend(cv.polling_component_schema("60s"))
)


async def to_code(config):
    var = cg.new_Pvariable(config[CONF_ID])
    await cg.register_component(var, config)
    await climate.register_climate(var, config)
    await ble_client.register_ble_node(var, config)
    cg.add(var.set_unit_of_measurement(config[CONF_UNIT_OF_MEASUREMENT]))
