<?php
// captureping.php - VERSÃO CORRIGIDA QUE PEGA O MAC CERTO
date_default_timezone_set('America/Sao_Paulo');

// ============================================
// FUNÇÃO CORRIGIDA PARA PEGAR MAC
// ============================================
function getMAC() {
    // TENTA DE VÁRIAS MANEIRAS
    $mac_sources = [
        $_GET['mac'] ?? '',
        $_POST['mac'] ?? '',
        $_SERVER['HTTP_X_DEVICE_MAC'] ?? '',
        $_SERVER['HTTP_MAC'] ?? '',
        $_SERVER['HTTP_X_MAC'] ?? ''
    ];
    
    foreach ($mac_sources as $mac) {
        if (!empty($mac) && strlen(trim($mac)) > 5) {
            return trim($mac);
        }
    }
    
    return '';
}

// PEGA O MAC
$mac_raw = getMAC();

// DEBUG - SALVA O QUE CHEGOU
$debug_log = "[" . date('Y-m-d H:i:s') . "] MAC RAW: '$mac_raw' | GET: " . json_encode($_GET) . " | POST: " . json_encode($_POST) . "\n";
file_put_contents('mac_debug.log', $debug_log, FILE_APPEND);

// ============================================
// FUNÇÃO toHex() CORRIGIDA
// ============================================
function toHex($input) {
    if (empty($input)) {
        // SE NÃO VEIO MAC, GERA UM BASEADO NO USER-AGENT + IP
        $ip = $_SERVER['REMOTE_ADDR'] ?? '0.0.0.0';
        $ua = $_SERVER['HTTP_USER_AGENT'] ?? '';
        return 'NO_MAC_' . strtoupper(substr(md5($ip . $ua), 0, 10));
    }
    
    // LIMPA - PERMITE : E - NO MAC
    $clean = preg_replace('/[^0-9A-Fa-f:-]/', '', $input);
    
    // SE JÁ ESTÁ NO FORMATO CERTO (com :), REMOVE OS :
    $clean = str_replace([':', '-'], '', $clean);
    
    // CONVERTE PARA MAIÚSCULO
    $clean = strtoupper($clean);
    
    // VERIFICA SE É HEX VÁLIDO
    if (!ctype_xdigit($clean)) {
        $ip = $_SERVER['REMOTE_ADDR'] ?? '0.0.0.0';
        return 'INVALID_' . strtoupper(substr(md5($ip . $input), 0, 10));
    }
    
    // RETORNA O MAC LIMPO
    return $clean;
}

$mac_clean = toHex($mac_raw);

// DEBUG
error_log("MAC LIMPO: $mac_clean | RAW: $mac_raw");

// ============================================
// DETECTAR DISPOSITIVO (MELHORADO)
// ============================================
function detectRealDevice($mac) {
    $ip = $_SERVER['REMOTE_ADDR'] ?? '0.0.0.0';
    $ua = strtolower($_SERVER['HTTP_USER_AGENT'] ?? '');
    
    // VERIFICA PELO MAC SE É NOTEBOOK OU CELULAR
    if (strpos($mac, '4DD7A1A4396168FB') !== false || 
        strpos($mac, '4DD7A1A43961') !== false) {
        return '💻 Notebook';
    }
    
    if (strpos($mac, '0ED254D4AA56671A') !== false ||
        strpos($mac, '0ED254D4AA56') !== false) {
        return '📱 Celular';
    }
    
    // SE NÃO PELO MAC, TENTA PELO USER-AGENT
    if (strpos($ua, 'windows') !== false) return '💻 Windows';
    if (strpos($ua, 'android') !== false) return '📱 Android';
    if (strpos($ua, 'iphone') !== false) return '📱 iPhone';
    if (strpos($ua, 'ipad') !== false) return '📱 iPad';
    if (strpos($ua, 'linux') !== false) return '💻 Linux';
    if (strpos($ua, 'mac') !== false) return '💻 Mac';
    
    // SE NÃO PELO UA, TENTA PELO IP
    if (strpos($ip, '2804:1e68:') === 0) {
        return '📱 Celular (Algar 5G)';
    }
    
    if (strpos($ip, '2804:') === 0) {
        return '📱 Celular (Rede Móvel 5G)';
    }
    
    if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
        $parts = explode('.', $ip);
        $first = (int)$parts[0];
        
        if ($first == 177) return '📱 Celular (Oi/Algar)';
        if ($first == 179) return '📱 Celular (Claro)';
        if ($first == 187 || $first == 189) return '📱 Celular (Tim)';
        if ($first == 191) return '📱 Celular (Vivo)';
        
        if ($first == 10 || $first == 172 || $first == 192 || $ip == '127.0.0.1') {
            return '🏠 WiFi/Rede Local';
        }
    }
    
    return '📱 Dispositivo';
}

$device_type = detectRealDevice($mac_clean);

// ============================================
// SALVAR NO BANCO (COM VERIFICAÇÃO DE DUPLICIDADE)
// ============================================
$DB_FILE = dirname(__FILE__) . '/ping/ping.db';

try {
    if (!file_exists(dirname($DB_FILE))) {
        mkdir(dirname($DB_FILE), 0777, true);
    }
    
    $db = new SQLite3($DB_FILE);
    
    // TABELA COM TRIGGER PARA EVITAR DUPLICADOS
    $db->exec("CREATE TABLE IF NOT EXISTS pings (
        mac TEXT PRIMARY KEY,
        ip TEXT NOT NULL,
        device_type TEXT,
        last_ping DATETIME DEFAULT CURRENT_TIMESTAMP,
        total_pings INTEGER DEFAULT 1,
        first_seen DATETIME DEFAULT CURRENT_TIMESTAMP
    )");
    
    $ip = $_SERVER['REMOTE_ADDR'] ?? '0.0.0.0';
    $now = date('Y-m-d H:i:s');
    
    // DEBUG EXTRA
    error_log("TENTANDO SALVAR: MAC=$mac_clean, IP=$ip, TYPE=$device_type");
    
    // VERIFICA SE JÁ EXISTE UM MAC PARECIDO (para evitar duplicação)
    $mac_like = substr($mac_clean, 0, 12) . '%';
    $stmt_check = $db->prepare("SELECT mac, total_pings FROM pings WHERE mac LIKE ? OR mac = ?");
    $stmt_check->bindValue(1, $mac_like, SQLITE3_TEXT);
    $stmt_check->bindValue(2, $mac_clean, SQLITE3_TEXT);
    $result = $stmt_check->execute();
    $existing = $result->fetchArray(SQLITE3_ASSOC);
    
    if ($existing) {
        // ATUALIZA O EXISTENTE
        $existing_mac = $existing['mac'];
        $new_count = intval($existing['total_pings']) + 1;
        
        $stmt = $db->prepare("UPDATE pings SET 
            ip = ?, 
            device_type = ?, 
            last_ping = ?, 
            total_pings = ? 
            WHERE mac = ?");
            
        $stmt->bindValue(1, $ip, SQLITE3_TEXT);
        $stmt->bindValue(2, $device_type, SQLITE3_TEXT);
        $stmt->bindValue(3, $now, SQLITE3_TEXT);
        $stmt->bindValue(4, $new_count, SQLITE3_INTEGER);
        $stmt->bindValue(5, $existing_mac, SQLITE3_TEXT);
        $stmt->execute();
        
        echo "PING_UPDATE|$existing_mac|$new_count|$device_type";
        
        error_log("ATUALIZADO: $existing_mac (era similar a $mac_clean)");
    } else {
        // INSERE NOVO
        $stmt = $db->prepare("INSERT INTO pings (mac, ip, device_type, last_ping, total_pings, first_seen) 
                              VALUES (?, ?, ?, ?, 1, ?)");
        $stmt->bindValue(1, $mac_clean, SQLITE3_TEXT);
        $stmt->bindValue(2, $ip, SQLITE3_TEXT);
        $stmt->bindValue(3, $device_type, SQLITE3_TEXT);
        $stmt->bindValue(4, $now, SQLITE3_TEXT);
        $stmt->bindValue(5, $now, SQLITE3_TEXT);
        $stmt->execute();
        
        echo "PING_NEW|$mac_clean|$device_type";
        
        error_log("NOVO: $mac_clean");
    }
    
    $db->close();
    
} catch (Exception $e) {
    error_log("ERRO: " . $e->getMessage());
    echo "PING_ERR|" . $e->getMessage();
}

// ============================================
// MOSTRAR ESTADO ATUAL DO BANCO
// ============================================
if (file_exists($DB_FILE)) {
    $db = new SQLite3($DB_FILE);
    $total = $db->querySingle("SELECT COUNT(*) FROM pings");
    $db->close();
    
    error_log("TOTAL NO BANCO: $total dispositivos");
}
?>