package org.firstinspires.ftc.teamcode;

public abstract class Gamepad extends OpModeWithMovement {
    protected double speed = 0.7;
    protected boolean slowMode = false;
    protected boolean prevX = false;
    protected boolean armUp = false;
    protected boolean prevL3 = false;
    protected double armHeight = 0;

    @Override
    public void init() {
        this.construct();

        api.print("Status", "Initializing, please wait");
        api.pause(1);

//        motors.shoulder1.runToPosition(0);
//        motors.shoulder2.runToPosition(0);
//        motors.shoulder1.setMode(API.MotorMode.RUN_TO_POSITION);
//        motors.shoulder2.setMode(API.MotorMode.RUN_TO_POSITION);
//        motors.shoulder1.start(1);
//        motors.shoulder2.start(1);
        motors.shoulder2.setDirection(API.Direction.REVERSE);

        api.clear();
        api.print("Press play to start");
    }

    @Override
    public void start() {
        api.clear();
    }

    @Override
    public void loop() {
//        double ms = getRuntime() / 1000;

        double currentSpeed = gamepad1.y ? 1 : slowMode ? 0.35 : speed;
        movement.move(-gamepad1.left_stick_y, gamepad1.left_stick_x, gamepad1.right_stick_x, currentSpeed, true);

        api.print("Speed", Double.toString(speed));
        api.print("Slow mode", slowMode ? "true" : "false");
        api.print("Arm up", armUp ? "true" : "false");
        api.print("Arm height", Double.toString(armHeight));

        if (gamepad1.x && !prevX) slowMode = !slowMode;
        if (gamepad2.left_stick_button && !prevL3) armUp = !armUp;

        if (gamepad1.right_bumper) speed = Math.min(speed + 0.01, 1);
        else if (gamepad1.left_bumper) speed = Math.max(speed - 0.01, 0.2);

        motors.carousel.controlWithTwoButtons(gamepad2.x, gamepad2.y, 0.9);

//        motors.shoulder1.runToPosition((int)armHeight);
//        motors.shoulder2.runToPosition((int)armHeight);
        motors.shoulder1.start(gamepad2.left_stick_y);
        motors.shoulder2.start(gamepad2.left_stick_y);
        motors.elbow.start(gamepad2.right_stick_y);

//        armHeight += gamepad2.left_stick_y;

//             if (gamepad2.a && !gamepad2.b) posThingy += 0.05; //motors.hand.start(1);
//        else if (!gamepad2.a && gamepad2.b) posThingy -= 0.05; //motors.hand.start(-1);
//        else motors.hand.stop();

//        motors.hand.setPosition(posThingy);

//        System.out.println(posThingy);

        if (armUp) {
            motors.hand.start(1);
        } else {
            motors.hand.start(-1);
        }

        prevX = gamepad1.x;
        prevL3 = gamepad2.left_stick_button;

//        while (getRuntime() / 1000 - ms < 15) ; // no empty while loop here!
    }
}
