{% from "macros.jinja.html" import information %}
{% extends "admin/master.html" %}

{% block body %}
    {{ information(current_user, active_semester_str, role="admin") }}

    <hr>

    {% for error in form.file.errors %}
        <div class="alert alert-danger">
            <strong>Error!</strong> {{ error }}
        </div>
    {% endfor %}

    <form method="POST" enctype="multipart/form-data">
        {{ form.csrf_token }}
        {{ form.file.label }}
        {{ form.file }}
        {{ form.submit }}
    </form>

    <hr>

    <h3>Help</h3>
    <p>
        The import file has to be a text file (with <code>.txt</code> at the end) encoded in UTF-8. It has to <strong>strictly</strong> follow the required format.
    </p>
    <p>
        You can take a look at the file
        <a
            href="{{ url_for('static', filename='example_database_import.txt') }}"
            target="_blank"
            rel="noopener noreferrer"
        >
            example_database_import.txt
        </a>
        for an example.
    </p>

    <h4>Required manipulation using the web interface</h4>
    <p>
        The following tables can not be imported from a file and have to be manipulated using the web interface.
    </p>
    <ul>
        <li>
            Semester
        </li>
        <li>
            Program
        </li>
        <li>
            Part
        </li>
        <li>
            User
        </li>
        <li>
            Assistant
        </li>
        <li>
            Experiment
        </li>
        <li>
            Semester Experiment
        </li>
    </ul>

    <h4>Optional values</h4>
    <p>
        If an attribute is optional/nullable and has no value, then <code>NULL</code> (uppercase) has to be written.
    </p>

    <h4>How to understand the tables in the next section</h4>
    <h5>ID</h5>
    <p>
        None of the mentioned ids in the import file is meant as a database id. The ids here only refer to the imported instances. The id in the database is assigned automatically.
    </p>

    <p>
        Here is the format of a table in the "Tables" section:
    </p>

    <h5>Table</h5>
    <ul>
        <li>
            id &#8594; 0 / 1 / 2 / ... (starts with 0 and has step
            1)
        </li>
        <li>
            attribute &#8594; example1 / example2 / ... (explanation)
        </li>
        <li>
            ...
        </li>
    </ul>
    <p>
        The type of attributes can be seen in the drawio file
        <a
            href="{{ url_for('static', filename='DB.drawio') }}"
        >
            DB.drawio
        </a> which can be opened using
        <a
            href="https://www.diagrams.net/"
            target="_blank"
            rel="noopener noreferrer"
        >
            diagrams.net
        </a>. Some attributes have constraints marked also in the drawio file.
    </p>

    <h4>Tables</h4>
    <h5>Semester (only one!)</h5>
    <ul>
        <li>
            label &#8594; WS / SS
        </li>
        <li>
            year &#8594; 22 / 23 / ...
        </li>
    </ul>

    <h5>Part</h5>
    <ul>
        <li>
            id
        </li>
        <li>
            number &#8594; 1 / 2 / ...
        </li>
        <li>
            program_label &#8594; BS / MS / BE / ... (for bachelor of science, master of science, bachelor of education, etc.)
        </li>
    </ul>

    <h5>Student</h5>
    <ul>
        <li>
            <code>student_number</code>
        </li>
        <li>
            <code>first_name</code>
        </li>
        <li>
            <code>last_name</code>
        </li>
        <li>
            <code>uni_email</code>
        </li>
        <li>
            <code><em>contact_email</em></code> (optional)
        </li>
        <li>
            <code><em>bachelor_thesis</em></code> (optional)
        </li>
        <li>
            <code><em>bachelor_thesis_work_group</em></code> (optional)
        </li>
        <li>
            <code><em>note</em></code> (optional)
        </li>
    </ul>

    <div style="font-size: 90%;">
        Notes:
        <ul>
            <li>
                If <code>student_number</code> is found in the database but <code>first_name</code>, <code>last_name</code> or <code>uni_email</code> do not match, a warning is given during the import. Pay attention to warnings!
            </li>
            <li>
                <code>bachelor_thesis</code> and <code>bachelor_thesis_work_group</code> are only updated in the database if they are not <code>NULL</code>. This prevents overriding values written using the web interface.
            </li>
            <li>
                If <code>note</code> is not <code>NULL</code> then it is appended to the note in the database if the student already exists in the database. It will not overwrite existing notes.
            </li>
        </ul>
    </div>

    <h5>Group</h5>
    <ul>
        <li>
            <code>id</code>
        </li>
        <li>
            <code>number</code> &#8594; 1 / 2 / ...
        </li>
        <li>
            <code>program_label</code>
        </li>
    </ul>

    <h5>PartStudent</h5>
    <ul>
        <li>
            <code>student_number</code>
        </li>
        <li>
            <code>part_id</code>
        </li>
        <li>
            <code>group_id</code>
        </li>
    </ul>

    <h5>Experiment</h5>
    <ul>
        <li>
            <code>id</code>
        </li>
        <li>
            <code>number</code> &#8594; 1 / 2 / ...
        </li>
        <li>
            <code>program_label</code>
        </li>
    </ul>

    <h5>GroupExperiment</h5>
    <ul>
        <li>
            <code>id</code>
        </li>
        <li>
            <code>experiment_id</code>
        </li>
        <li>
            <code>group_id</code>
        </li>
    </ul>

    <h5>Appointment</h5>
    <ul>
        <li>
            <code>date</code> &#8594; 12.09.2022
        </li>
        <li>
            <code>special</code> &#8594; 1 / 0
        </li>
        <li>
            <code>group_experiment_id</code>
        </li>
        <li>
            <code>assistant_email</code>
        </li>
    </ul>

    {{ footer|safe }}
{% endblock body %}