#!/usr/bin/python3
# https://datascientist.fr/blog/tutoriel-python-lancer-un-serveur-http-en-une-ligne-de-code
# https://developer.mozilla.org/fr/docs/Learn_web_development/Extensions/Forms/Form_validation
# https://www.gekkode.com/developpement/expression-reguliere-pour-valider-une-adresse-ip/
# https://www.creativejuiz.fr/blog/javascript/recuperer-parametres-get-url-javascript

from http.server import HTTPServer, BaseHTTPRequestHandler

import socket
import os

class DynamicHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        with open('adresseDMX.txt', 'r') as f:
            adresseDMXActuelle = f.read()
        self.send_response(200)
        self.send_header("Content-type", "text/html")
        self.end_headers()
        message =  '<!DOCTYPE html><html><head>'
        message += '<meta charset="utf-8">'
        message += '<title>Configuration du serveur</title><style>input:invalid {border: red solid 3px;}</style></head>'
        message += '<body><h1>Param&eacute;trage du serveur</h1>'
        message += '<form><label>Entrez la nouvelle adresse IP </label>'
        message += '<input name="ip" type="text" required pattern="(\\b25[0-5]|\\b2[0-4][0-9]|\\b[01]?[0-9][0-9]?)(\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}" placeholder="###.###.###.###"/>'
        message += '<button>Soumettre</button>'
        message += '</form><br><br>'
        message += '<h2>Adresse DMX actuelle : <label id="dmx"></label></h2>'
        message += '<form><label>Entrez la nouvelle adresse DMX [1 - 499] </label>'
        message += '<input name="dmx" type="text" required pattern="(([1-4][0-9]{2})|([1-9][0-9])|([1-9]))" placeholder="###"/>' # Ici nombre compris entre 1 - 499. Pour info [REGEX 1-512] = ((51[0-2])|(50[0-9])|([1-4][0-9]{2})|([1-9][0-9])|([1-9]))
        message += '<button>Soumettre</button></form>'
        message += '<script>var vars = {};window.location.href.replace( location.hash, \'\' ).replace(/[?&]+([^=&]+)=?([^&]*)?/gi,'
        message += 'function( m, key, value ) {vars[key] = value !== undefined ? value : \'\';});'
        message += 'if (vars["dmx"] == null) {vars = ' + adresseDMXActuelle + ';} else {vars = vars["dmx"]}document.getElementById("dmx").textContent = vars;'
        message += '</script></body></html>'
        self.wfile.write(message.encode('utf-8'))
        if (self.path.find("/?ip=") != -1):
            resultat = self.path.split('=')
            print(resultat[1])
        if (self.path.find("/?dmx=") != -1):
            resultat = self.path.split('=')
            adresse = int(resultat[1])
            if (adresse != 0):
                print("DMX =", adresse)
                #adresseDMXActuelle = adresse
                with open('adresseDMX.txt', 'w') as f:
                    f.write(f"{adresse}")

def run(server_class=HTTPServer, handler_class=DynamicHandler):
    server_address = ('', 8000)
    httpd = server_class(server_address, handler_class)
    print("Serving dynamic content on port 8000")
    httpd.serve_forever()

if __name__ == '__main__':
    run()

# Changer l'adresse IP avec Network Manager nmcli
"""
import subprocess

CONNECTION = "Wired connection 1"   # à adapter
IP = "192.168.1.60/24"
GATEWAY = "192.168.1.1"
DNS = "8.8.8.8"

def run(cmd):
    subprocess.run(cmd, check=True)

run([
    "sudo", "nmcli", "con", "mod", CONNECTION,
    "ipv4.method", "manual",
    "ipv4.addresses", IP,
    "ipv4.gateway", GATEWAY,
    "ipv4.dns", DNS
])

run(["sudo", "nmcli", "con", "down", CONNECTION])
run(["sudo", "nmcli", "con", "up", CONNECTION])

print("✅ IP locale modifiée") """