@extends('layouts.page-layout')

@section('title', '{{ $pageTitle }}')

@section('content')
<div class="container mt-3">
    <noscript>
        <div class="alert alert-danger">L'activation de Javascript est nécessaire sur la page.</div>
    </noscript>
    @if(!empty($insertMessage))
    <div class="alert alert-{{ $insertMessage["status"] }}" role="alert">
        @if(!empty($insertMessage["pdoError"]))
            <strong>{{ $insertMessage["message"] }}</strong>
            <br>{{ $insertMessage["pdoError"] }}
        @else
            {{ $insertMessage["message"] }}
        @endif
    </div>
    @endif

    <h1>{{ $pageTitle }}</h1>


    <div class="max-800 border rounded bg-light p-2">
        <h5>Type d'objet à créer</h5>
        <select id="objectType" class="form-select form-select-sm" aria-label=".form-select-sm example">
            <option value="dontchooseme" selected>Choisissez un objet dans la liste</option>
            <option value="Auteur">Auteur (oui c'est triste mais on les considère comme tel dans le code :c)</option>
            <option value="Adherent">Adhérent (est-ce surprenant du coup?)</option>
            <option value="Livre">Livre</option>
            <option value="Nationalite">Nationalité</option>
            <option value="Genre">Genre</option>
            <option value="Categorie">Categorie</option>
        </select>
    </div>
    <form action="index.php" method="post" class="max-800 mt-2" id="objectForm">
    </form>
</div>

<script type="text/javascript">
    const objectForm = document.getElementById("objectForm");
    const selectObjectType = document.getElementById("objectType");
    selectObjectType.addEventListener('change', function (){
        if(selectObjectType.value !== 'dontchooseme') {
            loadObjectTypeForm(selectObjectType.value);
        }
    })
    const typesList = {
        "int" : "number",
        "varchar" : "text",
        "date" : "date"
    };

    async function loadObjectTypeForm(objectType){
        objectForm.innerHTML = "";

        await fetch('?action=creerObjet&describeTable=' + objectType)
            .then(res => res.json())
            .then((out) => {
                console.log('Output: ', out);

                let objectName = document.createElement("input");
                objectName.name = "objectName";
                objectName.setAttribute("value", objectType);
                objectName.hidden = true;
                objectForm.appendChild(objectName);

                if(out.status === "success"){
                    for(let i = 0; i < out.columns.length; i++){
                        // On évite de proposer les clés primaires auto incrémentables
                        if(out.columns[i].Extra !== "auto_increment"){
                            let columnType = out.columns[i].Type;
                            let match = columnType.match(/([a-z]*)/);
                            objectForm.appendChild(
                                createInputDiv(
                                    typesList[match[1]],
                                    out.columns[i].Field
                                )
                            );
                        }
                    }
                }else{
                    let errorAlert = document.createElement("div");
                    errorAlert.classList.add("alert");
                    errorAlert.classList.add("alert-danger");
                    errorAlert.innerHTML = "<b>Erreur lors de la récupération des spécifications de l'objet " + objectType + "</b><br>" + out.message;
                    objectForm.appendChild(errorAlert);
                }
            }).catch(err => console.error(err));

        let actionInput = document.createElement("input");
        actionInput.name = "action";
        actionInput.value = "creerObjet";
        actionInput.hidden = true;

        objectForm.appendChild(actionInput);

        let submitButton = document.createElement("button");
        submitButton.type = "submit";
        submitButton.classList.add("btn");
        submitButton.classList.add("btn-primary");
        submitButton.innerText = "Créer";

        objectForm.appendChild(submitButton);
    }

    function createInputDiv(type, name){
        let mainContainer = document.createElement("div");
        mainContainer.classList.add("mb-3");

        let label = document.createElement("label");
        label.classList.add("form-label");
        label.setAttribute("for", name);

        let showName = name.split(/(?=[A-Z])/).join(' ').toLowerCase();
        showName = showName.charAt(0).toUpperCase() + showName.slice(1);

        label.innerText = showName;

        mainContainer.appendChild(label);

        let input = document.createElement("input");
        input.classList.add("form-control");
        input.type = type;
        input.name = name;
        input.required = true;

        mainContainer.appendChild(input);

        return mainContainer;
    }
</script>
@endsection