// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.

package frc.robot.subsystems;

import com.kauailabs.navx.frc.AHRS;
import com.revrobotics.CANSparkMax;
import com.revrobotics.CANSparkMaxLowLevel.MotorType;
import edu.wpi.first.wpilibj.DoubleSolenoid;
import edu.wpi.first.wpilibj.PneumaticsModuleType;
import edu.wpi.first.wpilibj.DoubleSolenoid.Value;
import edu.wpi.first.wpilibj.drive.DifferentialDrive;
import edu.wpi.first.wpilibj.motorcontrol.MotorControllerGroup;
import edu.wpi.first.wpilibj2.command.SubsystemBase;
import frc.robot.Constants;

public class BasePilotable extends SubsystemBase {
  final CANSparkMax avantdroit = new CANSparkMax(Constants.avantdroit, MotorType.kBrushless);
  final CANSparkMax avantgauche = new CANSparkMax(Constants.avantgauche, MotorType.kBrushless);
  final CANSparkMax arrieredroit = new CANSparkMax(Constants.arrieredroit, MotorType.kBrushless);
  final CANSparkMax arrieregauche = new CANSparkMax(Constants.arrieregauche, MotorType.kBrushless);
  final MotorControllerGroup droit = new MotorControllerGroup(avantdroit, arrieredroit);
  final MotorControllerGroup gauche = new MotorControllerGroup(avantgauche, arrieregauche);
  final DifferentialDrive drive = new DifferentialDrive(gauche, droit);
  //piston
  private DoubleSolenoid brakedroit = new DoubleSolenoid(PneumaticsModuleType.CTREPCM,Constants.brakedroit, Constants.brakedroit);
  private DoubleSolenoid brakegauche = new DoubleSolenoid(PneumaticsModuleType.CTREPCM,Constants.brakegauche, Constants.brakegauche);
  //gyro
  private AHRS gyroscope = new AHRS();public double getangle() {return gyroscope.getAngle();}
   public double getpitch() {
    return gyroscope.getPitch();
  }

  public void drive(double xSpeed, double zRotation, double d){
    drive.arcadeDrive(xSpeed, zRotation);
  }
  public double distance(){
    return (-avantdroit.getEncoder().getPosition()
    +avantgauche.getEncoder().getPosition()
    -arrieredroit.getEncoder().getPosition()
    +arrieregauche.getEncoder().getPosition()) / 4;
  }
  public void Reset() {
    avantdroit.getEncoder().setPosition(0);
    avantgauche.getEncoder().setPosition(0);
    arrieredroit.getEncoder().setPosition(0);
    arrieregauche.getEncoder().setPosition(0);
  }
public void BrakeOuvre(){
  brakedroit.set(Value.kForward);
  brakegauche.set(Value.kForward);
}
public void BrakeFerme(){
  brakedroit.set(Value.kReverse);
  brakegauche.set(Value.kReverse);
}
  /** Creates a new BasePilotable. */
  public BasePilotable() {
    droit.setInverted(true);
  }

  @Override
  public void periodic() {
    // This method will be called once per scheduler run
    
  }
}