<?php
require_once '../config.php';

if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    jsonResponse(false, 'Método inválido.');
}

$api_secret = $_POST['api_secret'] ?? '';
$chave = trim($_POST['chave'] ?? '');
$hardware_id = trim($_POST['hardware_id'] ?? '');
$nome_pc = trim($_POST['nome_pc'] ?? '');
$usuario_windows = trim($_POST['usuario_windows'] ?? '');

if ($api_secret !== API_SECRET) {
    jsonResponse(false, 'Acesso não autorizado.');
}

if (empty($chave) || empty($hardware_id)) {
    jsonResponse(false, 'Chave da licença e Hardware ID são obrigatórios.');
}

$stmt = $pdo->prepare("SELECT * FROM licencas WHERE chave = ? LIMIT 1");
$stmt->execute([$chave]);
$licenca = $stmt->fetch();

if (!$licenca) {
    jsonResponse(false, 'Licença não encontrada.');
}

if ($licenca['status'] !== 'ativa') {
    jsonResponse(false, 'Licença não está ativa.', [
        'status' => $licenca['status']
    ]);
}

$hoje = date('Y-m-d');

if (!empty($licenca['data_expiracao']) && $licenca['data_expiracao'] < $hoje) {
    $stmt = $pdo->prepare("UPDATE licencas SET status = 'expirada' WHERE id = ?");
    $stmt->execute([$licenca['id']]);

    jsonResponse(false, 'Licença expirada.', [
        'status' => 'expirada'
    ]);
}

$stmt = $pdo->prepare("
    SELECT * FROM ativacoes 
    WHERE licenca_id = ? AND hardware_id = ?
    LIMIT 1
");
$stmt->execute([$licenca['id'], $hardware_id]);
$ativacao = $stmt->fetch();

if ($ativacao) {
    $stmt = $pdo->prepare("
        UPDATE ativacoes 
        SET ultimo_acesso = NOW(), nome_pc = ?, usuario_windows = ?
        WHERE id = ?
    ");
    $stmt->execute([$nome_pc, $usuario_windows, $ativacao['id']]);

    jsonResponse(true, 'Licença já ativada neste computador.', [
        'status' => 'ativa',
        'tipo' => $licenca['tipo'],
        'data_inicio' => $licenca['data_inicio'],
        'data_expiracao' => $licenca['data_expiracao'],
        'dias_restantes' => calcularDiasRestantes($licenca['data_expiracao']),
        'limite_maquinas' => $licenca['limite_maquinas']
    ]);
}

$stmt = $pdo->prepare("SELECT COUNT(*) AS total FROM ativacoes WHERE licenca_id = ?");
$stmt->execute([$licenca['id']]);
$totalAtivacoes = (int)$stmt->fetch()['total'];

$limiteMaquinas = (int)$licenca['limite_maquinas'];

// 0 = ilimitado
if ($limiteMaquinas !== 0 && $totalAtivacoes >= $limiteMaquinas) {
    jsonResponse(false, 'Limite de computadores atingido.', [
        'limite_maquinas' => $limiteMaquinas,
        'computadores_ativos' => $totalAtivacoes
    ]);
}

$stmt = $pdo->prepare("
    INSERT INTO ativacoes 
    (licenca_id, hardware_id, nome_pc, usuario_windows)
    VALUES (?, ?, ?, ?)
");
$stmt->execute([
    $licenca['id'],
    $hardware_id,
    $nome_pc,
    $usuario_windows
]);

jsonResponse(true, 'Licença ativada com sucesso.', [
    'status' => 'ativa',
    'tipo' => $licenca['tipo'],
    'data_inicio' => $licenca['data_inicio'],
    'data_expiracao' => $licenca['data_expiracao'],
    'dias_restantes' => calcularDiasRestantes($licenca['data_expiracao']),
    'limite_maquinas' => $limiteMaquinas,
    'computadores_ativos' => $totalAtivacoes + 1
]);

function calcularDiasRestantes($dataExpiracao)
{
    if (empty($dataExpiracao)) {
        return 'vitalicia';
    }

    $hoje = new DateTime(date('Y-m-d'));
    $fim = new DateTime($dataExpiracao);

    if ($fim < $hoje) {
        return 0;
    }

    return $hoje->diff($fim)->days;
}