content: {-# LANGUAGE DataKinds        #-}
  {-# LANGUAGE TypeApplications #-}
  module Main where
  
  -- base
  import Control.Monad (forM_, void)
  
  -- switch
  import Device.Nintendo.Switch
  
  import ControllerTest (leftTest, rightTest, sensorTest)
  
  main :: IO ()
  main = do
    putStrLn "------------------------------------------------------------------"
    putStrLn "Testing all connected Pro controllers one after another ..."
    putStrLn "------------------------------------------------------------------"
    withConsole $ \switch -> do
      infos <- getControllerInfos @'ProController switch
      forM_ infos $ \info ->
        withController info $ \controller -> do
          setPlayerLights flashAll controller
          void $ getInput controller -- ack
          setInertialMeasurement False controller
          void $ getInput controller -- ack
          setVibration True controller
          putStrLn "------------------------------------------------------------------"
          putStrLn "Testing left side of Pro controller ..."
          putStrLn "Press Arrow Down  to enable controller vibration."
          putStrLn "Press Arrow Right to disable controller vibration."
          putStrLn "Press -           to switch to right side."
          putStrLn "------------------------------------------------------------------"
          leftTest controller -- ack comes with first input
          putStrLn "------------------------------------------------------------------"
          putStrLn "Testing right side of Pro controller ..."
          putStrLn "Press Y    to enable the home light."
          putStrLn "Press X    to disable the home light."
          putStrLn "Press B    to enable controller vibration."
          putStrLn "Press A    to disable controller vibration."
          putStrLn "Press +    to test the sensors and analog stick inputs."
          putStrLn "Press Home to end the test of the sensors and the sticks."
          putStrLn "------------------------------------------------------------------"
          rightTest controller
          setInertialMeasurement True controller
          sensorTest btnHome controller -- ack comes with first input