<?php
date_default_timezone_set('America/La_Paz');
header('Content-Type: application/json; charset=UTF-8');

define('BIOTIME_BASE', 'http://192.168.0.112');
define('BIOTIME_USER', 'admin');
define('BIOTIME_PASS', 'Tykun.2026');

function biotime_get_token(): ?string {
    $ch = curl_init(BIOTIME_BASE . '/jwt-api-token-auth/');
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_POST           => true,
        CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
        CURLOPT_POSTFIELDS     => json_encode(['username' => BIOTIME_USER, 'password' => BIOTIME_PASS]),
        CURLOPT_TIMEOUT        => 5,
    ]);
    $res = curl_exec($ch);
    curl_close($ch);
    if (!$res) return null;
    $data = json_decode($res, true);
    return $data['token'] ?? null;
}

function biotime_get(string $token, string $path): ?array {
    $ch = curl_init(BIOTIME_BASE . $path);
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER     => ['Content-Type: application/json', 'Authorization: JWT ' . $token],
        CURLOPT_TIMEOUT        => 8,
    ]);
    $res = curl_exec($ch);
    curl_close($ch);
    if (!$res) return null;
    return json_decode($res, true);
}

$token = biotime_get_token();
if (!$token) {
    echo json_encode(['total' => 0, 'devices' => [], 'error' => 'auth_failed']);
    exit;
}

// Obtener dispositivos
$terminals = biotime_get($token, '/iclock/api/terminals/?page_size=50');
if (!$terminals || empty($terminals['data'])) {
    echo json_encode(['total' => 0, 'devices' => []]);
    exit;
}

// Obtener transacciones del mes actual
$today     = date('Y-m-d');
$month_s   = date('Y-m-01');
$txs_data  = biotime_get($token, '/iclock/api/transactions/?page_size=1000&start_time=' . urlencode($month_s . ' 00:00:00') . '&end_time=' . urlencode($today . ' 23:59:59'));
$txs = $txs_data['data'] ?? [];

// Indexar actividad por terminal_sn
$activity = [];
foreach ($txs as $tx) {
    $sn = $tx['terminal_sn'];
    if (!$sn) continue;
    if (!isset($activity[$sn])) {
        $activity[$sn] = [
            'eventos_mes'    => 0,
            'accesos_mes'    => 0,
            'ultimo_evento'  => null,
            'ultimo_usuario' => null,
            'ultimo_ts'      => 0,
        ];
    }
    $activity[$sn]['eventos_mes']++;
    $activity[$sn]['accesos_mes']++;
    $ts = strtotime($tx['punch_time']);
    if ($ts > $activity[$sn]['ultimo_ts']) {
        $activity[$sn]['ultimo_ts']      = $ts;
        $activity[$sn]['ultimo_evento']  = $tx['punch_time'];
        $activity[$sn]['ultimo_usuario'] = trim($tx['first_name'] . ' ' . $tx['last_name']) ?: null;
    }
}

// Estado: 3 = conectado (online), resto = offline
$devices = [];
foreach ($terminals['data'] as $t) {
    $sn    = $t['sn'];
    $act   = $activity[$sn] ?? [];
    $state = (int)($t['state'] ?? 0);

    $devices[] = [
        'id'             => $t['id'],
        'nombre'         => $t['alias'] ?? $sn,
        'modelo'         => 'ZKTeco MB10VL',
        'ip'             => $t['ip_address'] ?? 'N/A',
        'firmware'       => $t['fw_ver']   ?? 'N/A',
        'sn'             => $sn,
        'estado'         => $state,        // 3 = online (igual que Suprema usa 2)
        'eventos_mes'    => $act['eventos_mes']    ?? 0,
        'accesos_mes'    => $act['accesos_mes']    ?? 0,
        'ultimo_evento'  => $act['ultimo_evento']  ?? null,
        'ultimo_usuario' => $act['ultimo_usuario'] ?? null,
        'last_activity'  => $t['last_activity']    ?? null,
    ];
}

echo json_encode([
    'total'   => count($devices),
    'devices' => $devices,
]);
