<?php
// koneksi database
$conn = new mysqli("localhost", "simplete_absensi2026", "!qazxsw@", "simplete_absensi");

// cek koneksi
if (mysqli_connect_errno()) {
    die("Koneksi gagal: " . mysqli_connect_error());
}


// simpan log data ke file log_simpan.txt dengan format seperti log absen
$tanggal_log = date("Y-m-d");
$log_filename = "logsave/log_req_{$tanggal_log}.txt";
$uri = $_SERVER['REQUEST_URI'];
$logMsg = date("Y-m-d H:i:s") . " | URI: " . $uri . PHP_EOL;
file_put_contents($log_filename, $logMsg, FILE_APPEND | LOCK_EX);

// --- Tambahan: Monitor semua request dari mesin walau bukan absen ---
$sn = $_GET['SN'] ?? '';
if (!empty($sn)) {
    $stmt = $conn->prepare("
        UPDATE mesin_absensi
        SET last_seen = NOW()
        WHERE sn = ?
    ");
    if ($stmt) {
        $stmt->bind_param("s", $sn);
        $stmt->execute();
        $stmt->close();
    }
}
// --- END ---

// hanya proses data absensi dari mesin
if (!isset($_GET['table']) || $_GET['table'] != 'ATTLOG') {
    echo "OK";
    exit;
}

// ambil raw data
$raw = trim(file_get_contents("php://input"));

// simpan log data ke file log_simpan.txt
$tanggal_log = date("Y-m-d");
$log_filename = "logsave/log_simpan_{$tanggal_log}.txt";
$logMsg = date("Y-m-d H:i:s") . " | SN: " . (isset($_GET['SN']) ? $_GET['SN'] : '-') . " | RAW: " . $raw . PHP_EOL;
file_put_contents($log_filename, $logMsg, FILE_APPEND | LOCK_EX);
// skip kalau kosong
if (empty($raw)) {
    echo "OK";
    exit;
}

// pecah data TAB
$data = explode("\t", $raw);

// ambil data
$pin    = isset($data[0]) ? trim($data[0]) : null;
$time = isset($data[1]) ? trim($data[1]) : null;
if ($time) {
    // Kurangi 1 jam dari waktu yang diberikan (asumsi format: YYYY-MM-DD HH:MM:SS)
    $dt = DateTime::createFromFormat('Y-m-d H:i:s', $time);
    if ($dt !== false) {
        $dt->modify('-1 hour');
        $time = $dt->format('Y-m-d H:i:s');
    }
}
$status = isset($data[2]) ? (int)$data[2] : 0;
$verify = isset($data[3]) ? (int)$data[3] : null;
// $sn sudah didefinisikan di atas

// generate tanggal dari jam
$tanggal = null;
if ($time) {
    // ambil bagian tanggal saja (YYYY-MM-DD) dari format datetime
    $tanggal = substr($time, 0, 10);
}

// validasi
if ($pin && $time) {

    // cek duplikat
    $cek = $conn->prepare("SELECT id FROM absensi WHERE id_user=? AND jam=? LIMIT 1");
    if ($cek) {
        $cek->bind_param("ss", $pin, $time);
        $cek->execute();
        $cek->store_result();

        if ($cek->num_rows == 0) {

            // Cari token, ortu_token, foto profil, nama user, dan kelas user
            $notif_token = '';
            $ortu_token = '';
            $foto_profil = '';
            $nama_user = '';
            $kelas_user = '';
            $token_stmt = $conn->prepare("SELECT token, ortu_token, foto_profil, nama, kelas FROM user WHERE id = ? LIMIT 1");
            if ($token_stmt) {
                $token_stmt->bind_param("s", $pin);
                $token_stmt->execute();
                $token_stmt->bind_result($notif_token, $ortu_token, $foto_profil, $nama_user, $kelas_user);
                $token_stmt->fetch();
                $token_stmt->close();
            }

            $source = "mesin_absensi";
            // Gunakan foto_profil user untuk kolom foto, jika ada, jika tidak fallback ke mesin.png
            $foto = (!empty($foto_profil)) ? $foto_profil : 'mesin.png';

            // insert data absensi - source & foto DIMASUKKAN KE ABSENSI
            $keterangan = 'absen mesin';
            // Edit: tambahkan kolom sn pada tabel absensi
            $stmt = $conn->prepare("INSERT INTO absensi (id_user, jam, verify, source, tanggal, keterangan, foto, sn) VALUES (?, ?, ?, ?, ?, ?, ?, ?)");
            if ($stmt) {
                $stmt->bind_param("ssisssss", $pin, $time, $verify, $source, $tanggal, $keterangan, $foto, $sn);
                $stmt->execute();
                $stmt->close();

                $now_datetime = date("Y-m-d H:i:s");
                $title = "Absensi Mesin";
                // Tentukan kata pengganti berdasarkan kelas
                $kata_pengganti = "ananda";
                if (!empty($kelas_user) && (strtoupper($kelas_user) === "GURU" || strtoupper($kelas_user) === "TU")) {
                    $kata_pengganti = "Bapak/Ibu";
                }
                // tambahkan kata yang sesuai ke message
                if (!empty($nama_user)) {
                    $message = "Selamat! Absensi melalui mesin sukses tercatat untuk " . $kata_pengganti . " " . $nama_user . " pada " . date("d-m-Y H:i:s", strtotime($time)) . ". Tetap semangat dan terus jaga kedisiplinan Anda!";
                } else {
                    $message = "Selamat! Absensi melalui mesin sukses tercatat pada " . date("d-m-Y H:i:s", strtotime($time)) . ". Tetap semangat dan terus jaga kedisiplinan Anda!";
                }
                $sender = 17;
                $notif_status = "pending";
                $route = 'absen';
                $id_view = $conn->insert_id; // mengambil ID absensi yang baru saja di-insert

                // Insert KE NOTIF tanpa kolom source & foto UNTUK ANAK/GURU/TU
                if (!empty($notif_token)) {
                    $notif_stmt = $conn->prepare("INSERT INTO notif (id_user, token, title, message, sender, status, create_at, route, id_view) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)");
                    if ($notif_stmt) {
                        $notif_stmt->bind_param(
                            "ssssisssi",
                            $pin, $notif_token, $title, $message, $sender, $notif_status, $now_datetime, $route, $id_view
                        );
                        $notif_stmt->execute();
                        $notif_stmt->close();
                    }
                }

                // Insert KE NOTIF UNTUK ORTU TOKEN JIKA ADA
                if (!empty($ortu_token)) {
                    $notif_stmt_ortu = $conn->prepare("INSERT INTO notif (id_user, token, title, message, sender, status, create_at, route, id_view) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)");
                    if ($notif_stmt_ortu) {
                        $notif_stmt_ortu->bind_param(
                            "ssssisssi",
                            $pin, $ortu_token, $title, $message, $sender, $notif_status, $now_datetime, $route, $id_view
                        );
                        $notif_stmt_ortu->execute();
                        $notif_stmt_ortu->close();
                    }
                }
            }
            // --- End insert ke notif ---
        }
        $cek->close();
    }
}

// wajib respon ke mesin
echo "OK";