<!DOCTYPE html>
<html lang="de">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" type="text/css" href="css/style.css">
    <link rel="icon" href="img/favicon.png" type="image/x-icon">
    <title>Artikelübersicht</title>
    <style>
        /* Stil für das Bearbeitungsformular */
        .edit-form {
            display: none;
        }

        /* Mauszeigeränderung, wenn über das Bild gefahren wird */
        .edit-form img:hover,
        .edit-form a:hover {
            cursor: pointer;
        }

        /* Stil für den Ist-Bestand, wenn er den Soll-Bestand unterschreitet */
        .low-stock {
            color: red; /* Schriftfarbe auf Orange ändern */
        }
        
        /* Stil für die Zeilen, deren Ablaufdatum innerhalb von 10 Tagen liegt */
        .expiring td {
            color: red; /* Schriftfarbe auf Rot ändern */
        }
    </style>
</head>
<body style="background-color: aliceblue;">
<header class="header">
    <div class="header-container">
        <h1>Materialverwaltung</h1>
        <nav>
            <ul>
                <li><a href="index.php">Home</a></li>
                <li><a href="add_material_form.php">Artikel hinzufügen</a></li>
                <li><a href="article_overview.php">Artikel Übersicht</a></li>
				<li><a href="Material_chrome.zip">chrome Erweiterung</a></li>
				<li><a href="backup_restore.php">Backup</a></li>
            </ul>
        </nav>
    </div>
</header>

<div class="container">
    <h2>Artikelübersicht</h2>

    <!-- Artikel suchen -->
    <form method="GET" action="article_overview.php" style="margin-bottom: 20px;">
        <input type="text" name="search" placeholder="Artikel suchen" size="50">
        <!-- Hier das size-Attribut geändert -->
        <input type="submit" value="Suchen">
    </form>

    <!-- Artikel anzeigen -->
    <table>
        <tr>
            <th>Name</th>
            <th>Hersteller</th>
            <th>Lagerort</th>
            <th>Anzahl soll</th>
            <th>Anzahl ist</th>
            <th>Ablaufdatum</th>
            <th>Benachrichtigungstage</th>
            <th>Barcode</th>
            <th>Bild</th>
            <th>Aktionen</th>
        </tr>
        <?php
        // Protokollierungsereignis einbinden
        include_once 'log_event.php';

        // Datenbankverbindung herstellen
        include_once 'config/config.php';

        // Verbindung zur Datenbank herstellen
        $conn = new mysqli($host, $username, $password, $database);
        if ($conn->connect_error) {
            die("Verbindung zur Datenbank fehlgeschlagen: " . $conn->connect_error);
        }

        // SQL-Abfrage vorbereiten
        $sql = "SELECT * FROM materials";

        // Wenn nach einem Artikel gesucht wird
        if(isset($_GET['search']) && !empty($_GET['search'])){
            $search = $_GET['search'];
            $sql .= " WHERE 
                item_name LIKE '%" . $search . "%' OR 
                manufacturer LIKE '%" . $search . "%' OR 
                location LIKE '%" . $search . "%' OR 
                barcode LIKE '%" . $search . "%'";
        }

        $result = $conn->query($sql);

        if ($result->num_rows > 0) {
            // Daten ausgeben
            while($row = $result->fetch_assoc()) {
                $expiration_date = date("d.m.Y", strtotime($row["expiration_date"]));
                $notification_days = intval($row["notification_days"]); // Tage vor dem Ablaufdatum aus der Datenbank lesen
                $ten_days_before_expiry = date("d.m.Y", strtotime("-" . $notification_days . " days", strtotime($row["expiration_date"]))); // Tage vor dem Ablaufdatum berechnen
                $current_date = date("d.m.Y"); // Aktuelles Datum

                echo "<tr";
                if (strtotime($current_date) >= strtotime($ten_days_before_expiry) && strtotime($current_date) <= strtotime($expiration_date)) {
                    echo " class='expiring'"; // Klasse 'expiring' hinzufügen
                }
                echo ">";

                echo "<td";
                if (strtotime($current_date) >= strtotime($ten_days_before_expiry) && strtotime($current_date) <= strtotime($expiration_date)) {
                    echo " style='color: red;'"; // Schriftfarbe auf Rot setzen
                }
                echo ">" . $row["item_name"] . "</td>";
                echo "<td>" . $row["manufacturer"] . "</td>";
                echo "<td>" . $row["location"] . "</td>";
                echo "<td>" . $row["amount_should"] . "</td>";
                echo "<td";
                if ($row["amount_is"] < $row["amount_should"]) {
                    echo " class='low-stock'";
                }
                echo ">" . $row["amount_is"] . "</td>";
                echo "<td>" . $expiration_date . "</td>";
                echo "<td>" . $notification_days . "</td>";
                echo "<td>" . $row["barcode"] . "</td>";
                echo "<td>";
                if (!empty($row["image"])) {
                    echo "<img src='" . $row["image"] . "' alt='Bild' style='width: 50px; height: 50px;' onclick='toggleEditForm(" . $row["id"] . ")'>";
                } else {
                    echo "<img src='img/free.png' alt='Standardbild' style='width: 50px; height: 50px;' onclick='toggleEditForm(" . $row["id"] . ")'>";
                }
                echo "</td>";
                echo "<td><img src='img/bearbeiten.png' alt='Bearbeiten' style='width: 20px; height: 20px;' onclick='toggleEditForm(" . $row["id"] . ")'> &nbsp; | &nbsp; <a href='remove_article.php?id=" . $row["id"] . "' onclick='return confirmDelete();'><img src='img/delete.png' alt='Löschen' style='width: 20px; height: 20px;' ></a></td>";

                echo "</tr>";
                // Bearbeitungsformular für jedes Element einfügen
                echo "<tr class='edit-form' id='edit-form-" . $row["id"] . "'><td colspan='9'>
                    <form id='form-" . $row["id"] . "' onsubmit='updateItem(event, " . $row["id"] . ")'>
                        <input type='text' name='name' value='" . $row["item_name"] . "'>
                        <input type='text' name='manufacturer' value='" . $row["manufacturer"] . "'>
                        <input type='text' name='location' value='" . $row["location"] . "'>
                        <input type='number' name='amount_should' value='" . $row["amount_should"] . "'>
                        <input type='number' name='amount_is' value='" . $row["amount_is"] . "'>
                        <input type='date' name='expiration_date' value='" . $row["expiration_date"] . "'>
                        <input type='number' name='notification_days' value='" . $row["notification_days"] . "'>
                        <input type='text' name='barcode' value='" . $row["barcode"] . "'>
                        <input type='hidden' name='id' value='" . $row["id"] . "'>
                        <input type='submit' value='Speichern'>
                    </form>
                </td></tr>";

                // Loggen des Löschens eines Artikels
                echo "<script>function confirmDelete" . $row["id"] . "() {
                    if(confirm('Möchten Sie diesen Artikel wirklich löschen?')) {
                        window.location.href = 'remove_article.php?id=" . $row["id"] . "';
                    }
                }</script>";
            }
        } else {
            echo "<tr><td colspan='9'>Keine Artikel gefunden</td></tr>";
        }
        $conn->close();
        ?>
    </table>
</div>

<script>
    // JavaScript-Funktion, um das Bearbeitungsformular anzuzeigen oder zu verstecken
    function toggleEditForm(id) {
        var editForm = document.getElementById("edit-form-" + id);
        if (editForm.style.display === "none") {
            editForm.style.display = "table-row";
        } else {
            editForm.style.display = "none";
        }
    }

    // JavaScript-Funktion zur Aktualisierung des Elements mit AJAX
    function updateItem(event, id) {
        event.preventDefault();
        var form = document.getElementById("form-" + id);
        var formData = new FormData(form);
        // Hinzufügen der ID zum FormData-Objekt
        formData.append('id', id); 
        
        var xhr = new XMLHttpRequest();
        xhr.open("POST", "update_article.php", true);
        // Hinzufügen des Headers für die XMLHttpRequest
        xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
        xhr.onload = function () {
            if (xhr.status === 200) {
                console.log(xhr.responseText); // Ausgabe der Serverantwort (zum Debuggen)
                // Hier können Sie zusätzliche Aktionen nach dem Speichern durchführen, z.B. die Seite aktualisieren
                window.location.reload(); // Seite neu laden, um die Änderungen anzuzeigen
            }
        };
        xhr.send(formData);
    }

    // JavaScript-Funktion, um eine Bestätigungsbox anzuzeigen, bevor der Artikel gelöscht wird
    function confirmDelete() {
        return confirm("Möchten Sie diesen Artikel wirklich löschen?");
    }

    // Überprüfen, ob der Browser die Notification API unterstützt
    if ("Notification" in window) {
        // Überprüfen, ob der Benutzer Berechtigung für Benachrichtigungen erteilt hat
        if (Notification.permission === "granted") {
            // Funktion zum Erstellen einer Benachrichtigung
            function createNotification(title, options) {
                new Notification(title, options);
            }
        } else if (Notification.permission !== "denied") {
            // Aufforderung an den Benutzer, um Berechtigung für Benachrichtigungen zu bitten
            Notification.requestPermission().then(function (permission) {
                if (permission === "granted") {
                    function createNotification(title, options) {
                        new Notification(title, options);
                    }
                }
            });
        }
    }

    // Überprüfung, ob das Ablaufdatum innerhalb von x Tagen liegt und eine Benachrichtigung senden
    function checkExpiryDate(expirationDate, notificationDays, itemName) {
        var tenDaysBeforeExpiry = new Date(expirationDate);
        tenDaysBeforeExpiry.setDate(tenDaysBeforeExpiry.getDate() - notificationDays);
        var currentDate = new Date();

        if (currentDate >= tenDaysBeforeExpiry && currentDate <= new Date(expirationDate)) {
            var options = {
                body: "Das Ablaufdatum von " + itemName + " liegt in " + notificationDays + " Tagen an.",
                icon: "icon.png" // Hier das Bild für die Benachrichtigung ändern
            };
            createNotification("Ablaufdatum nahe", options);
        }
    }

    // Aufrufen der Funktion für jedes Element in der Tabelle
    var rows = document.getElementsByClassName("expiring");
    for (var i = 0; i < rows.length; i++) {
        var cells = rows[i].getElementsByTagName("td");
        var expirationDate = cells[5].innerText; // Das 6. td-Element enthält das Ablaufdatum
        var notificationDays = parseInt(cells[6].innerText); // Das 7. td-Element enthält die Benachrichtigungstage
        var itemName = cells[0].innerText; // Das 1. td-Element enthält den Artikelnamen
        checkExpiryDate(expirationDate, notificationDays, itemName);
    }
</script>
</body>
<span class="watermark">© copyright 2024 by M_Viper</span>
</html>