import machine
import socket
import ure

# Weby[WpHTMLev[g`
HTML_TMPL = """\                                                   
<!DOCTYPE html>
<html>
  <body> 
     <h1>ESP32 Device Control</h1>
     <table border="1">
         <tr><th>Device</th><th>Status</th>
			<th>Control</th></tr>
         <tr>
           <td>LED</td><td>__LEDSTATE__</td>
           <td>
              <form action="./" method="get">
                <button type="submit" name=
	    "DeviceCtrl" value="LED_ON">ON</button>
                <button type="submit" name=
	  "DeviceCtrl" value="LED_OFF">OFF</button>
                <button type="submit" 
	   name="DeviceCtrl" value="LED_GETSTATE">
			    Get Status</button>
              </form>
           </td>
         </tr>
     </table>
     <p>__MESSAGE__</p>
  </body>
</html>\
"""

# set GPIO for LED Control
led = machine.Pin(25,machine.Pin.OUT)
led.off()

addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1]

s = socket.socket()  #\Pbg쐬
s.bind(addr)
s.listen(1)  #\PbgbX

while True:

    cl, addr = s.accept()  # \Pbgɐڑꂽ
    print('client connected from', addr)
    cl_file = cl.makefile('rwb', 0)
    LED_ctrl_request = None

    #
    # get HTTP Request
    #
    while True:
        line = cl_file.readline()  
# Client̃f[^擾
        if not line or line == b'\r\n':
            break
        if 'GET' in line[0:3]:
              print("------------------")
              print(line)
              print("------------------")
              match = ure.match(".*DeviceCtrl
			           =([A-z_]*)",line)  
		     # DeviceCtrl=XX_XXł
              if match:
                    LED_ctrl_request = match.group(1)  # we擾
    #
    # control LED
    #
    if LED_ctrl_request == None:
        message = "to switch LED, press On or Off button"
    elif LED_ctrl_request == b'LED_ON':  # Client̎wLED_ONȂ
        message = "turn on LED"  # LED_
        led.on()
    elif LED_ctrl_request == b'LED_OFF':  # Client̎wLED_OFFȂ
        message = "turn off LED"  # LED
        led.off()
    elif LED_ctrl_request == b'LED_GETSTATE':  # Client̎wLED_GETSTATEȂ
        message = "get LED status"  # LED _Ԃ\i͈ȉj
    else:
        message = "Error!! Unkown request"

    #
    # get LED state
    #
    if led.value() == 1:
        led_state = "ON"
    else:
        led_state = "OFF"

    #
    # create response and send to client
    #
    response = HTML_TMPL.replace("__LEDSTATE__",
		led_state)      # pHTML쐬
    response = response.replace("__MESSAGE__",
				       message)
    cl.send(response)             #pHTMLԋp
    cl.close()
s.close()