001/************************ PROJECT ZIXI ************************/
002/* Copyright (c) 2026 StuyPulse Robotics. All rights reserved.*/
003/* This work is licensed under the terms of the MIT license.  */
004/**************************************************************/
005package com.stuypulse.robot.util.talonfx.config;
006
007import com.ctre.phoenix6.configs.CANcoderConfiguration;
008import com.ctre.phoenix6.configs.MagnetSensorConfigs;
009import com.ctre.phoenix6.hardware.CANcoder;
010import com.ctre.phoenix6.signals.SensorDirectionValue;
011
012/** Wrapper class for configuring CANCoder encoders */
013public class CANCoderConfig {
014    private final CANcoderConfiguration configuration = new CANcoderConfiguration();
015    private final MagnetSensorConfigs magnetSensorConfigs = new MagnetSensorConfigs();
016
017    public void configure(CANcoder encoder) {
018        CANcoderConfiguration defaultConfig = new CANcoderConfiguration();
019        encoder.getConfigurator().apply(defaultConfig);
020
021        encoder.getConfigurator().apply(configuration);
022    }
023
024    public CANcoderConfiguration getConfiguration() {
025        return this.configuration;
026    }
027
028    // MAGNET SENSOR CONFIGS
029
030    public CANCoderConfig withSensorDirection(SensorDirectionValue sensorDirection) {
031        magnetSensorConfigs.withSensorDirection(sensorDirection);
032
033        configuration.withMagnetSensor(magnetSensorConfigs);
034
035        return this;
036    }
037
038    public CANCoderConfig withAbsoluteSensorDiscontinuityPoint(double discontinuityPoint) {
039        magnetSensorConfigs.withAbsoluteSensorDiscontinuityPoint(discontinuityPoint);
040
041        configuration.withMagnetSensor(magnetSensorConfigs);
042
043        return this;
044    }
045
046    public CANCoderConfig withMagnetOffset(double magnetOffset) {
047        magnetSensorConfigs.withMagnetOffset(magnetOffset);
048
049        configuration.withMagnetSensor(magnetSensorConfigs);
050
051        return this;
052    }
053}