import json

import base
import rest
from config import cfg

ONE_MOVE_DURATION = cfg.getfloat("relay", "onemovedur")            #s
ONE_TINYMOVE_DURATION = cfg.getfloat("relay", "onetinymovedur")            #s
ONE_TURN_DURATION = cfg.getfloat("relay", "oneturndur")            #s
ONE_TINYTURN_DURATION = cfg.getfloat("relay", "onetinyturndur")    #s

RelayActURL = base.joinURL(cfg.get("relay","addr"), "relay/set")

class __relayactuator():
    def Forward(self, token):
        param = json.dumps({"status": 9, "duration": ONE_MOVE_DURATION})
        (hr, resp) = rest.post(RelayActURL, param, token)
        return hr
                
    def Backward(self, token):
        param = json.dumps({"status": 6, "duration": ONE_MOVE_DURATION})
        (hr, resp) = rest.post(RelayActURL, param, token)
        return hr
    
    def Left(self, token):
        param = json.dumps({"status": 42, "duration": ONE_TURN_DURATION})
        (hr, resp) = rest.post(RelayActURL, param, token)
        return hr
    
    def Right(self, token):
        param = json.dumps({"status": 21, "duration": ONE_TURN_DURATION})
        (hr, resp) = rest.post(RelayActURL, param, token)
        return hr
        
    def Back(self, token):
        param = json.dumps({"status": 42, "duration": ONE_TURN_DURATION*2})
        (hr, resp) = rest.post(RelayActURL, param, token)
        return hr
        
    def TinyForward(self, token):
        param = json.dumps({"status": 9, "duration": ONE_TINYMOVE_DURATION})
        (hr, resp) = rest.post(RelayActURL, param, token)
        return hr
        
    def TinyBackward(self, token):
        param = json.dumps({"status": 6, "duration": ONE_TINYMOVE_DURATION})
        (hr, resp) = rest.post(RelayActURL, param, token)
        return hr
        
    def TinyLeft(self, token):
        param = json.dumps({"status": 42, "duration": ONE_TINYTURN_DURATION})
        (hr, resp) = rest.post(RelayActURL, param, token)
        return hr
    
    def TinyRight(self, token):
        param = json.dumps({"status": 21, "duration": ONE_TINYTURN_DURATION})
        (hr, resp) = rest.post(RelayActURL, param, token)
        return hr

    def ForwardByTime(self, token, time):
        param = json.dumps({"status": 9, "duration": time})
        (hr, resp) = rest.post(RelayActURL, param, token)
        return hr
                
    def BackwardByTime(self, token, time):
        param = json.dumps({"status": 6, "duration": time})
        (hr, resp) = rest.post(RelayActURL, param, token)
        return hr
    
    def LeftByTime(self, token, time):
        param = json.dumps({"status": 42, "duration": time})
        (hr, resp) = rest.post(RelayActURL, param, token)
        return hr
    
    def RightByTime(self, token, time):
        param = json.dumps({"status": 21, "duration": time})
        (hr, resp) = rest.post(RelayActURL, param, token)
        return hr
        
    def LeftForwardByTime(self, token, time):
        param = json.dumps({"status": 33, "duration": time})
        (hr, resp) = rest.post(RelayActURL, param, token)
        return hr
                
    def LeftBackwardByTime(self, token, time):
        param = json.dumps({"status": 24, "duration": time})
        (hr, resp) = rest.post(RelayActURL, param, token)
        return hr
        
    def RightForwardByTime(self, token, time):
        param = json.dumps({"status": 36, "duration": time})
        (hr, resp) = rest.post(RelayActURL, param, token)
        return hr
                
    def RightBackwardByTime(self, token, time):
        param = json.dumps({"status": 18, "duration": time})
        (hr, resp) = rest.post(RelayActURL, param, token)
        return hr
    
    def Stop(self, token):
        param = json.dumps({"status": 0, "duration": 0})
        (hr, resp) = rest.post(RelayActURL, param, token)
        return hr
        
Actuator = __relayactuator()