#include "pico/stdlib.h"

// Definições de pinos
#define BUTTON_A 2   // Botão A: Modo manual - Rede Elétrica
#define BUTTON_B 3   // Botão B: Modo manual - Solar
#define LED_ELEC 4   // LED indicador de Rede Elétrica
#define LED_SOLAR 5  // LED indicador de Solar
#define SENSOR_ELEC 6 // Simula a disponibilidade da Rede Elétrica
#define SENSOR_SOLAR 7 // Simula a disponibilidade de Energia Solar

void setup() {
    // Configurar GPIOs
    gpio_init(BUTTON_A);
    gpio_set_dir(BUTTON_A, GPIO_IN);
    gpio_pull_up(BUTTON_A);

    gpio_init(BUTTON_B);
    gpio_set_dir(BUTTON_B, GPIO_IN);
    gpio_pull_up(BUTTON_B);

    gpio_init(LED_ELEC);
    gpio_set_dir(LED_ELEC, GPIO_OUT);

    gpio_init(LED_SOLAR);
    gpio_set_dir(LED_SOLAR, GPIO_OUT);

    gpio_init(SENSOR_ELEC);
    gpio_set_dir(SENSOR_ELEC, GPIO_IN);
    gpio_pull_up(SENSOR_ELEC);

    gpio_init(SENSOR_SOLAR);
    gpio_set_dir(SENSOR_SOLAR, GPIO_IN);
    gpio_pull_up(SENSOR_SOLAR);
}

void loop() {
    bool elec_available = gpio_get(SENSOR_ELEC);
    bool solar_available = gpio_get(SENSOR_SOLAR);
    bool manual_mode = !gpio_get(BUTTON_A) || !gpio_get(BUTTON_B);

    if (!manual_mode) {
        // Modo automático
        if (elec_available) {
            gpio_put(LED_ELEC, 1);
            gpio_put(LED_SOLAR, 0);
        } else if (solar_available) {
            sleep_ms(5000); // Espera 5 segundos para transição
            gpio_put(LED_SOLAR, 1);
            gpio_put(LED_ELEC, 0);
        }
    } else {
        // Modo manual
        if (!gpio_get(BUTTON_A)) {
            gpio_put(LED_ELEC, 1);
            gpio_put(LED_SOLAR, 0);
        }
        if (!gpio_get(BUTTON_B)) {
            gpio_put(LED_SOLAR, 1);
            gpio_put(LED_ELEC, 0);
        }
    }
    sleep_ms(100); // Debounce
}

int main() {
    setup();
    while (1) {
        loop();
    }
}