#ifndef LED_H_
#define LED_H_

#include <stdint.h>
#include <stdbool.h>

/**
 * @brief Identificadores dos LEDs disponíveis no hardware
 */
typedef enum {
    LED_ID_STOP,
    LED_ID_CHARGING,
    LED_ID_ERROR,
    LED_ID_MAX
} led_id_t;

/**
 * @brief Padrões de comportamento possíveis para os LEDs
 */
typedef enum {
    LED_PATTERN_OFF,            ///< LED sempre desligado
    LED_PATTERN_ON,             ///< LED sempre ligado
    LED_PATTERN_BLINK,          ///< Pisca com ciclo padrão (500ms on / 500ms off)
    LED_PATTERN_BLINK_FAST,     ///< Pisca rápido (200ms / 200ms)
    LED_PATTERN_BLINK_SLOW,     ///< Pisca lento (300ms / 1700ms)
    LED_PATTERN_CHARGING_EFFECT ///< Efeito visual para carregamento (2s on / 1s off)
} led_pattern_t;

/**
 * @brief Inicializa os LEDs com base na configuração da placa
 *        Deve ser chamada uma única vez na inicialização do sistema.
 */
void led_init(void);

/**
 * @brief Define diretamente o tempo ligado/desligado de um LED.
 *        Pode ser usado para padrões personalizados.
 * 
 * @param led_id   Identificador do LED (ver enum led_id_t)
 * @param ontime   Tempo ligado em milissegundos
 * @param offtime  Tempo desligado em milissegundos
 */
void led_set_state(led_id_t led_id, uint16_t ontime, uint16_t offtime);

/**
 * @brief Aplica um dos padrões de piscar definidos ao LED
 * 
 * @param led_id   Identificador do LED (ver enum led_id_t)
 * @param pattern  Padrão desejado (ver enum led_pattern_t)
 */
void led_apply_pattern(led_id_t led_id, led_pattern_t pattern);

#endif /* LED_H_ */
