

import com.pi4j.Pi4J;
import com.pi4j.context.Context;
import com.pi4j.io.gpio.digital.DigitalInput;
import com.pi4j.io.gpio.digital.DigitalInputConfig;
import com.pi4j.io.gpio.digital.DigitalOutput;
import com.pi4j.io.gpio.digital.DigitalOutputConfig;
import com.pi4j.io.gpio.digital.DigitalState;
import com.pi4j.io.i2c.I2C;
import com.pi4j.io.i2c.I2CConfig;
import com.pi4j.io.spi.Spi;
import com.pi4j.io.spi.SpiConfig;

public class Pi4JWrapper {
    private static final Context pi4j = Pi4J.newAutoContext();

    // ✅ GPIO Output (geschikt voor Raspberry Pi 5)
    public static DigitalOutput createOutput(int pin, boolean initialState) {
        DigitalOutputConfig config = DigitalOutput.newConfigBuilder(pi4j)
                .id("gpio-" + pin)
                .name("Output-" + pin)
                .address(pin)
                .shutdown(DigitalState.LOW)
                .initial(initialState ? DigitalState.HIGH : DigitalState.LOW)
                .provider("gpiod-digital-output") // ✅ Gebruik de Raspberry Pi 5 provider
                .build();
        return pi4j.create(config);
    }

    // ✅ GPIO Input (geschikt voor Raspberry Pi 5)
    public static DigitalInput createInput(int pin) {
        DigitalInputConfig config = DigitalInput.newConfigBuilder(pi4j)
                .id("gpio-" + pin)
                .name("Input-" + pin)
                .address(pin)
                .provider("gpiod-digital-input") // ✅ Gebruik de Raspberry Pi 5 provider
                .build();
        return pi4j.create(config);
    }

    // ✅ I2C blijft hetzelfde
    public static I2C createI2C(int bus, int device) {
        I2CConfig config = I2C.newConfigBuilder(pi4j)
                .id("i2c-" + device)
                .name("I2C-" + device)
                .bus(bus)
                .device(device)
                .provider("linuxfs-i2c")
                .build();
        return pi4j.create(config);
    }

    // ✅ SPI blijft hetzelfde
	public static Spi createSpi(int bus, int device, int chipSelect) {
    SpiConfig config = Spi.newConfigBuilder(pi4j)
            .id("spi-" + device)
            .name("SPI-" + device)
            .bus(bus)
            .address(chipSelect) // ✅ Voeg de chip-select pin toe
            .provider("linuxfs-spi")
            .build();
    return pi4j.create(config);
}

}
