<?php
// cron_demo.php

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

$db_file     = __DIR__ . "/.db.db";
$teste_file  = __DIR__ . "/teste.json";
$config_file = __DIR__ . "/config_demo.json";
$log_file    = __DIR__ . "/cron_demo.log";

/* =====================================================
   FUNCION: Limpiar "_" finales del password
   (para ignorar bloqueo automático)
===================================================== */
function normalizePassword($password) {
    return rtrim($password, "_");
}

try {

    /* =====================================================
       LEER CONFIG DEMO
    ===================================================== */
    if (!file_exists($config_file)) {
        throw new Exception("config_demo.json no encontrado.");
    }

    $config = json_decode(file_get_contents($config_file), true);

    $demo_username = $config['username'] ?? null;
    $demo_password = $config['password'] ?? null;
    $demo_duration = intval($config['demo_duration'] ?? 3600);

    if (!$demo_username || !$demo_password) {
        throw new Exception("Config demo incompleta.");
    }

    /* =====================================================
       CONECTAR DB
    ===================================================== */
    if (!file_exists($db_file)) {
        throw new Exception(".db.db no encontrado.");
    }

    $db = new PDO("sqlite:$db_file");
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    /* =====================================================
       LEER teste.json
    ===================================================== */
    if (!file_exists($teste_file)) {
        file_put_contents($teste_file, json_encode([], JSON_PRETTY_PRINT));
    }

    $teste_data = json_decode(file_get_contents($teste_file), true);
    if (!is_array($teste_data)) {
        $teste_data = [];
    }

    $now = time();

    foreach ($teste_data as $mac => $demo) {

        $start_time  = isset($demo['timestamp']) ? strtotime($demo['timestamp']) : 0;
        $expire_time = $start_time + $demo_duration;

        /* =====================================================
           BUSCAR REGISTRO EN IBOF
        ===================================================== */
        $stmt = $db->prepare("
            SELECT id, username, password
            FROM ibof
            WHERE macad = :mac
            LIMIT 1
        ");

        $stmt->execute([':mac' => $mac]);
        $row = $stmt->fetch(PDO::FETCH_ASSOC);

        if (!$row) {
            file_put_contents($log_file,
                "[".date("Y-m-d H:i:s")."] MAC no encontrada en ibof: $mac\n",
                FILE_APPEND
            );
            continue;
        }

        $id       = $row['id'];
        $username = $row['username'];
        $password = $row['password'];

        $cleanPassword = normalizePassword($password);

        /* =====================================================
           1️⃣ BLOQUEAR SI EXPIRÓ (NO ELIMINA teste.json)
        ===================================================== */
        if ($expire_time <= $now) {

            if (substr($password, -1) !== "_") {

                $newPassword = $password . "_";

                $upd = $db->prepare("
                    UPDATE ibof
                    SET password = :password
                    WHERE id = :id
                ");

                $upd->execute([
                    ':password' => $newPassword,
                    ':id'       => $id
                ]);

                file_put_contents($log_file,
                    "[".date("Y-m-d H:i:s")."] Demo expirado y bloqueado MAC=$mac ID=$id\n",
                    FILE_APPEND
                );
            }
        }

        /* =====================================================
           2️⃣ ELIMINAR DE teste.json SOLO SI FUE EDITADO
           (Ignora expiración y "_" automático)
        ===================================================== */
        $editedManually = (
            $username !== $demo_username ||
            $cleanPassword !== $demo_password
        );

        if ($editedManually) {

            unset($teste_data[$mac]);

            file_put_contents($log_file,
                "[".date("Y-m-d H:i:s")."] Eliminado de teste.json MAC=$mac (editado manualmente)\n",
                FILE_APPEND
            );
        }
    }

    /* =====================================================
       GUARDAR teste.json ACTUALIZADO
    ===================================================== */
    file_put_contents(
        $teste_file,
        json_encode($teste_data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE)
    );

} catch (Exception $e) {

    file_put_contents($log_file,
        "[".date("Y-m-d H:i:s")."] ERROR: ".$e->getMessage()."\n",
        FILE_APPEND
    );
}
