#include <stdio.h>
#include "pico/stdlib.h"
#include "pico/cyw43_arch.h"

// Definindo os pinos GPIO para o LED e o botão
#define LED_PIN 15     // Pino GPIO 13 para o LED
#define BUTTON_PIN 9  // Pino GPIO 15 para o botão

// Função que configura os pinos
void setup() {
    // Inicializa o pino do LED como saída
    gpio_init(LED_PIN);
    gpio_set_dir(LED_PIN, GPIO_OUT);

    // Inicializa o pino do botão como entrada com pull-up (garante que o pino tenha um valor alto quando o botão não for pressionado)
    gpio_init(BUTTON_PIN);
    gpio_set_dir(BUTTON_PIN, GPIO_IN);
    gpio_pull_up(BUTTON_PIN);  // Ativa o resistor de pull-up
}

int main() {
    setup();  // Configura os pinos

    bool led_on = false;  // Variável para controlar o estado do LED
    bool last_button_state = false;  // Variável para armazenar o estado anterior do botão
    bool current_button_state = false;  // Variável para armazenar o estado atual do botão

    while (true) {
        // Lê o estado atual do botão
        current_button_state = gpio_get(BUTTON_PIN);

        // Verifica se houve uma transição de "não pressionado" para "pressionado"
        if (!current_button_state && last_button_state) {
            // Alterna o estado do LED
            led_on = !led_on;
            gpio_put(LED_PIN, led_on);  // Acende ou apaga o LED conforme o estado
            sleep_ms(200);  // Debouncing: pequeno atraso para evitar múltiplos acionamentos
        }

        // Atualiza o estado anterior do botão
        last_button_state = current_button_state;

        sleep_ms(10);  // Pequeno atraso para evitar sobrecarga de processamento
    }

    return 0;
}