<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Board Generator</title>
</head>

<style>
    .viewport {
        position: relative;
    }

    .viewport canvas {
        position: absolute;
    }

    canvas{
        background-color: transparent;
        border: 1px solid #000000;
    }

    .input_field {
        width: 100%;
        padding: 5px;
        display: flex
    }

    .input_field a{
        width: 50%;
    }
    
</style>

<body>
    <div class="ui padded container" style="width: 90%">

        <div class="ui segment" style="margin: 10px">
            <h1 id="question" style="text-transform:uppercase; text-align: center;">
                <font color="purple">Generate random boards for GOLMI</font>  
            </h1>
        </div>

        <div class="ui segment" style="margin: 10px; display: flex">
            <div class="ui segment" style="margin: 10px; width: 40%;">
                <div class="viewport" style="height: 400px; width: 400px; margin: auto;">
                    <canvas id="background" width="400px" height="400px"></canvas>
                    <canvas id="objects" width="400px" height="400px"></canvas>
                    <canvas id="gripper" width="400px" height="400px"></canvas>
                </div>
            </div>
            

            <div class="ui segment" style="margin: 10px; width: 40%;">
                <div class="viewport" style="height: 400px; width: 400px; margin: auto;">
                    <canvas id="background_source" width="400px" height="400px"></canvas>
                    <canvas id="objects_source" width="400px" height="400px"></canvas>
                    <canvas id="gripper_source" width="400px" height="400px"></canvas>
                </div>
            </div>


            <div class="ui segment" style="margin: 10px; width: 20%;">
                <input id="delete" type="submit" class="ui basic fluid red button" value="Delete Object" style="padding: 10px; width: 100%">
                <br>
                <input id="clear" type="submit" class="ui basic fluid blue button" value="Clear Board" style="padding: 10px; width: 100%">
                <br>
                <input id="save" type="submit" class="ui basic fluid purple button" value="Save Board" style="padding: 10px; width: 100%">
            </div>

            </div>
        </div>
    </div>


<!-- You MUST include jQuery before Fomantic -->
<script src="https://cdn.jsdelivr.net/npm/jquery@3.6.3/dist/jquery.min.js"></script>
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/fomantic-ui@2.8.8/dist/semantic.min.css">
<script src="https://cdn.jsdelivr.net/npm/fomantic-ui@2.8.8/dist/semantic.min.js"></script>
<script type="text/javascript" src="//cdn.socket.io/4.4.1/socket.io.min.js"></script>

<script src="{{ url_for('static', filename='js/view/View.js') }}"></script>
<script src="{{ url_for('static', filename='js/view/COCOLayerView.js') }}"></script>
<script src="{{ url_for('static', filename='js/view/LView.js') }}"></script>


<script>
    let golmi_socket = null;
    let golmi_source = null;
    let sourcelayerView = null;
    let layerView = null;
    
    function start_golmi(url, password) {
        // expect same as backend e.g. the default "http://127.0.0.1:5000";
        // --- create a golmi_socket --- //
        // don't connect yet
        golmi_socket = io(url, {
            auth: { "password": password }
        });

        // --- view --- // 
        // Get references to the three canvas layers
        let bgLayer = document.getElementById("background");
        let objLayer = document.getElementById("objects");
        let grLayer = document.getElementById("gripper");

        grLayer.onclick = (event) => {
            socket.emit("click", {
                event: "place_object",
                room_id: "{{ room_id }}",
                coordinates: {"x": event.offsetX, "y": event.offsetY, "block_size": layerView.blockSize}
            });
        }

        // Set up the view js, this also sets up key listeners
        layerView = new document.CocoLayerView(golmi_socket, bgLayer, objLayer, grLayer);
    }

    function start_golmi_source(url, password) {
        // expect same as backend e.g. the default "http://127.0.0.1:5000";
        // --- create a golmi_socket --- //
        // don't connect yet
        golmi_source = io(url, {
            auth: { "password": password }
        });

        // --- view --- // 
        // Get references to the three canvas layers
        let bgLayer = document.getElementById("background_source");
        let objLayer = document.getElementById("objects_source");
        let grLayer = document.getElementById("gripper_source");

        grLayer.onclick = (event) => {
            color = $("#color").val()
            shape = $("#shape").val()
            placing = $("#placing").is(':checked')
         
            socket.emit("click", {
                event: "select_object",
                room_id: "{{ room_id }}",
                coordinates: {"x": event.offsetX, "y": event.offsetY, "block_size": sourcelayerView.blockSize}
            });
        }

        // Set up the view js, this also sets up key listeners
        sourcelayerView = new document.CocoLayerView(golmi_source, bgLayer, objLayer, grLayer);
    }

    $(document).ready(function () {
        socket = io.connect();
        socket.on("connect", () => {
            console.log(socket.id)
        })

        start_golmi( "{{ golmi_host }}", "{{ golmi_pswd }}")
        start_golmi_source( "{{ golmi_host }}", "{{ golmi_pswd }}")
        golmi_socket.connect();
        golmi_source.connect();
        golmi_socket.emit("join", { "room_id": "{{ room_id }}" });
        golmi_source.emit("join", { "room_id": "{{ room_id }}" + "_s" });

        $("#clear").click( function(e){
            socket.emit("clear");
        })

        $("#save").click( function(e){
            $("body").append(`<iframe src="/download_state/{{ room_id }}" style='display: none;' ></iframe>`);
        })

        $("#delete").click( function(e){
            socket.emit("delete");
        })
        
    })
</script>

</body>
</html>