<?php
require_once dirname(__DIR__) . '/_app_guard.php';
app_guard_validate();
require_once dirname(__DIR__) . '/_device_access.php';
header("Content-Type: application/json; charset=utf-8");

$db = new PDO("sqlite:" . dirname(__DIR__) . "/db.db");
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
da_ensure_schema($db);

/* =========================
   RECEBE MAC (POST OU GET)
========================= */

$macRaw = $_POST["mac"] ?? $_GET["mac"] ?? "";
$deviceType = da_normalize_device_type((string)($_POST['device_type'] ?? $_GET['device_type'] ?? 'tv'));
$macRaw = trim($macRaw);

if ($macRaw === "") {
    echo json_encode([
        "status" => "erro",
        "msg" => "MAC ausente"
    ]);
    exit;
}

/* =========================
   NORMALIZA MAC
========================= */

// remove tudo que não for A-F ou 0-9
$mac = strtoupper($macRaw);
$mac = preg_replace('/[^A-F0-9]/', '', $mac);

// garante no máximo 12 caracteres
$mac = substr($mac, 0, 12);

if (strlen($mac) < 6) {
    echo json_encode([
        "status" => "erro",
        "msg" => "MAC inválido"
    ]);
    exit;
}

/* =========================
   BUSCA DIRETA (SEM LOOP)
========================= */

$stmt = $db->prepare("
    SELECT mac, dns, username, password, vencimento, status, nome_cliente, whatsapp, device_type, last_device_type
    FROM usuarios
    WHERE REPLACE(REPLACE(REPLACE(UPPER(mac), ':',''), '-',''), ' ','') LIKE :mac
    LIMIT 1
");

$stmt->execute([
    ":mac" => $mac . "%"
]);

$encontrado = $stmt->fetch(PDO::FETCH_ASSOC);

if (!$encontrado) {
    echo json_encode([
        "status" => "nao_encontrado",
        "mac_recebido" => $macRaw,
        "mac_tratado" => $mac
    ]);
    exit;
}

if (!da_can_device_login($db, $encontrado, $deviceType)) {
    echo json_encode([
        'status' => 'bloqueado_dispositivo',
        'ativo' => false
    ]);
    exit;
}
da_update_last_device($db, (string)($encontrado['mac'] ?? $macRaw), $deviceType);

$dnsList = [];
try {
    $dnsStmt = $db->query("SELECT url FROM dns ORDER BY nome ASC");
    while ($row = $dnsStmt->fetch(PDO::FETCH_ASSOC)) {
        $url = rtrim(trim((string)($row["url"] ?? "")), "/");
        if ($url !== "" && !in_array($url, $dnsList, true)) {
            $dnsList[] = $url;
        }
    }
} catch (Throwable $e) {
    $dnsList = [];
}

$dnsUsuario = rtrim(trim((string)($encontrado["dns"] ?? "")), "/");
if ($dnsUsuario !== "" && !in_array($dnsUsuario, $dnsList, true)) {
    array_unshift($dnsList, $dnsUsuario);
}

/* =========================
   TRATA VENCIMENTO
========================= */

$vencimentoRaw = trim($encontrado["vencimento"] ?? "");
$vencimentoFinal = "";

if ($vencimentoRaw !== "") {

    if (is_numeric($vencimentoRaw)) {
        $vencimentoFinal = date("Y-m-d H:i:s", (int)$vencimentoRaw);

    } else {
        $dt = DateTime::createFromFormat("Y-m-d H:i:s", $vencimentoRaw);
        if ($dt !== false) {
            $vencimentoFinal = $dt->format("Y-m-d H:i:s");
        }
    }
}

/* =========================
   RESPOSTA FINAL
========================= */

echo json_encode([
    "status"       => "ok",
    "mac"          => $encontrado["mac"],
    "dns"          => $dnsUsuario !== "" ? $dnsUsuario : ($dnsList[0] ?? ""),
    "dns_list"     => array_values(array_unique($dnsList)),
    "username"     => $encontrado["username"],
    "password"     => $encontrado["password"],
    "nome_cliente" => (string)($encontrado["nome_cliente"] ?? ""),
    "whatsapp"     => (string)($encontrado["whatsapp"] ?? ""),
    "mac_recebido" => $macRaw,
    "mac_tratado"  => $mac,
    "vencimento"   => $vencimentoFinal,
    "ativo"        => (strtolower(trim((string)$encontrado["status"])) === "ativo"),
    "device_type"  => $deviceType
]);
