require 'rover'
require 'relay_board'
require 'video'
require 'test_suite'

class TestTank < TestSuite

  def initialize
    @rover = Rover.instance
  end

  def testRelay
    unless serialWorking? @rover.relay.serial_port
      puts "Serial Comms are not working"
      return false
    end
    @rover.relay.allOff()
    unless(@rover.relay.get_status(0) == "00") 
      puts "relay test failed on get_status(0)"
      return false
    end
    @rover.relay.turn_on(1)
    unless(@rover.relay.get_status(1) == "1")
      puts "relay test failed on get_status(1)"
      return false
    end

    @rover.relay.turn_on(2)
    @rover.relay.turn_on(3)
    @rover.relay.turn_on(4)
    
    unless(@rover.relay.get_status(0) == "0F")
      puts "relay test failed on get_status(0) == 0F"
      return false
    end
    @rover.relay.turn_off(0)
    unless(@rover.relay.get_status(0) == "00")
      puts "relay test failed on get_status(0) == 00"
      return false
    end
    true
  end

  def testRack
    @rover.relay.turn_on RelayBoard::RACK
    sleep 1
    unless serialWorking? @rover.rack.serial_port
      puts "Serial Comms are not working"
      return false
    end
    is_working = ezservoWorking? @rover.rack
    @rover.relay.turn_off RelayBoard::RACK
    is_working
  end

  #TODO Implement!
  def testPropulsion
    return true
  end

  def testAcm
    @rover.relay.v12On
    @rover.acm.acquire_data
    @rover.relay.v12Off
  end

  def testVideo
    @rover.relay.turn_on RelayBoard::V12
    @rover.relay.turn_on RelayBoard::VIDEO
    sleep 30
    @rover.video.captureImage(Video::CHAMBER_1, "test_image")
    @rover.relay.turn_off RelayBoard::V12
    @rover.relay.turn_off RelayBoard::VIDEO
  end
end

t = TestTank.new
t.runAllTests()
