<?php
$txtPath = 'pracownicy.txt';

function h(string $v) {
    return htmlspecialchars($v, ENT_QUOTES, 'UTF-8');
}

$messages = [];
$rows = [];
$shouldShowData = false;

$db = mysqli_connect('localhost', 'root', '', '3p_1_baza_pracownikow');
if ($db) {
    mysqli_set_charset($db, 'utf8mb4');
} else {
    $messages[] = 'Błąd połączenia z bazą: ' . h(mysqli_connect_error());
}

$action = $_POST['action'] ?? null;

$sqlCreate = "
    CREATE TABLE IF NOT EXISTS pracownicy (
        numer_id INT NOT NULL PRIMARY KEY,
        nazwisko   VARCHAR(100) NOT NULL,
        imie       VARCHAR(100) NOT NULL,
        stanowisko VARCHAR(120) NOT NULL,
        dzial      VARCHAR(120) NOT NULL,
        sekcja     VARCHAR(120) NOT NULL
    ) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
";

if ($db) {
    if ($action === 'create_table') {
        if (mysqli_query($db, $sqlCreate)) {
            $messages[] = 'Tabela „pracownicy” utworzona (jeśli nie istniała).';
        } else {
            $messages[] = 'Błąd tworzenia tabeli: ' . h(mysqli_error($db));
        }
    } elseif ($action === 'load_data') {
        $exists = false;
        $check = mysqli_query($db, "SELECT 1 FROM pracownicy LIMIT 1");
        if ($check) {
            $exists = true;
            mysqli_free_result($check);
        }

        if (!$exists) {
            $messages[] = 'Tabela „pracownicy” nie istnieje. Najpierw utwórz ją przyciskiem „Utwórz tabelę”.';
        } else {
            if (!is_file($txtPath)) {
                $messages[] = 'Brak pliku pracownicy.txt w katalogu projektu.';
            } else {
                if (!mysqli_query($db, "TRUNCATE TABLE pracownicy")) {
                    $messages[] = 'Nie udało się wyczyścić tabeli: ' . h(mysqli_error($db));
                } else {
                    $stmt = mysqli_prepare(
                        $db,
                        "INSERT INTO pracownicy (numer_id, nazwisko, imie, stanowisko, dzial, sekcja) VALUES (?, ?, ?, ?, ?, ?)"
                    );
                    if (!$stmt) {
                        $messages[] = 'Nie udało się przygotować zapytania: ' . h(mysqli_error($db));
                    } else {
                        $countOk = 0;
                        $countErr = 0;

                        $fh = fopen($txtPath, 'rb');
                        if ($fh === false) {
                            $messages[] = 'Nie można otworzyć pliku pracownicy.txt.';
                        } else {
                            $first = fgetcsv($fh, 0, ';');

                            while (($row = fgetcsv($fh, 0, ';')) !== false) {
                                if (!is_array($row) || count($row) < 6) {
                                    $countErr++;
                                    continue;
                                }
                                $id         = (int)trim((string)$row[0]);
                                $nazwisko   = trim((string)$row[1]);
                                $imie       = trim((string)$row[2]);
                                $stanowisko = trim((string)$row[3]);
                                $dzial      = trim((string)$row[4]);
                                $sekcja     = trim((string)$row[5]);

                                mysqli_stmt_bind_param($stmt, 'isssss', $id, $nazwisko, $imie, $stanowisko, $dzial, $sekcja);
                                if (!mysqli_stmt_execute($stmt)) {
                                    $countErr++;
                                } else {
                                    $countOk++;
                                }
                            }
                            fclose($fh);
                        }
                        mysqli_stmt_close($stmt);
                        $messages[] = "Załadowano rekordów: {$countOk}. Błędnych wierszy: {$countErr}.";
                    }
                }
            }
        }
    } elseif ($action === 'show_data') {
        $shouldShowData = true;
        $res = mysqli_query($db, "SELECT numer_id, nazwisko, imie, stanowisko, dzial, sekcja FROM pracownicy ORDER BY numer_id");
        if ($res) {
            $rows = mysqli_fetch_all($res, MYSQLI_ASSOC) ?: [];
            mysqli_free_result($res);
        } else {
            $messages[] = 'Nie udało się pobrać danych: ' . h(mysqli_error($db));
        }
    }
}

$messagesHtml = '';
if ($messages) {
    $items = '';
    foreach ($messages as $m) {
        $items .= '<li>' . h($m) . '</li>';
    }
    $messagesHtml = '<strong>Komunikaty:</strong><ul style="margin:8px 0 0 18px;">' . $items . '</ul>';
}

$dataHtml = '';
if ($shouldShowData) {
    if (!$rows) {
        $dataHtml = '<div class="empty">Brak danych do wyświetlenia.</div>';
    } else {
        $trs = '';
        foreach ($rows as $r) {
            $trs .= '<tr>'
                . '<td>' . (int)$r['numer_id'] . '</td>'
                . '<td>' . h($r['nazwisko']) . '</td>'
                . '<td>' . h($r['imie']) . '</td>'
                . '<td>' . h($r['stanowisko']) . '</td>'
                . '<td>' . h($r['dzial']) . '</td>'
                . '<td>' . h($r['sekcja']) . '</td>'
                . '</tr>';
        }

        $dataHtml = '<table>'
            . '<thead><tr>'
            . '<th>ID</th><th>Nazwisko</th><th>Imię</th><th>Stanowisko</th><th>Dział</th><th>Sekcja</th>'
            . '</tr></thead>'
            . '<tbody>' . $trs . '</tbody>'
            . '</table>';
    }
}

echo <<<HTML
<!doctype html>
<html lang="pl">
<head>
    <meta charset="UTF-8">
    <title>T60a - praca z bazą danych</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="style.css" >
</head>
<body>
<header>
<h1>Zadanie T60a</h1>
<h2>Autor: Jakub Grzegorczyk</h2>
</header>
<div class="box">
<p>
Tym razem zadanie jest bardziej złożone. Oto co należy zrobić:
<ul>
<li>Utwórz bazę danych o nazwie 3p_1_baza_pracownikow.</li>
<li>Do zadania dołączony został plik zawierający dane 114 pracowników - dokonaj konwersji tych danych do formaty txt (uzyskaj plik z danymi pracownicy.txt.</li>
<li>Na utworzonej stronie projektu znajduje się przycisk "Utwórz tabelę", który w bazie 3p_1_baza_pracownikow tworzy tabelę pracownicy.</li>
<li>Drugi przycisk "Załaduj dane" dodaje dane z pliku tekstowego pracownicy.txt do tabeli pracownicy.</li>
<li>Trzeci przycisk wyświetla dane z tabeli pracownicy w postaci tabelarycznej.</li>
</ul>
</p>
</div>
<div class="box">
    <form method="post">
        <div class="actions">
            <button type="submit" name="action" value="create_table">Utwórz tabelę</button><br>
            <button type="submit" name="action" value="load_data">Załaduj dane z pracownicy.txt</button><br>
            <button type="submit" name="action" value="show_data">Pokaż dane</button>
        </div>
    </form>
</div>

<div class="box">
{$messagesHtml}
{$dataHtml}
</div>

</body>
</html>
HTML;