import esphome.codegen as cg
import esphome.config_validation as cv
from esphome.components import uart
from esphome.components.light.types import AddressableLightEffect
from esphome.components.light.effects import register_addressable_effect
from esphome.const import CONF_NAME, CONF_UART_ID

DEPENDENCIES = ["uart"]

adalight_ns = cg.esphome_ns.namespace("adalight")
AdalightLightEffect = adalight_ns.class_(
    "AdalightLightEffect", uart.UARTDevice, AddressableLightEffect
)

CONFIG_SCHEMA = cv.Schema({})


@register_addressable_effect(
    "adalight",
    AdalightLightEffect,
    "Adalight",
    {cv.GenerateID(CONF_UART_ID): cv.use_id(uart.UARTComponent)},
)
async def adalight_light_effect_to_code(config, effect_id):
    effect = cg.new_Pvariable(effect_id, config[CONF_NAME])
    await uart.register_uart_device(effect, config)
    return effect
