<?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'] ?? '');

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',
        'dias_restantes' => 0
    ]);
}

$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) {
    jsonResponse(false, 'Este computador não está ativado nesta licença.', [
        'status' => 'nao_ativado'
    ]);
}

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

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

jsonResponse(true, 'Licença válida.', [
    'status' => 'ativa',
    'tipo' => $licenca['tipo'],
    'data_inicio' => $licenca['data_inicio'],
    'data_expiracao' => $licenca['data_expiracao'],
    'dias_restantes' => calcularDiasRestantes($licenca['data_expiracao']),
    'limite_maquinas' => (int)$licenca['limite_maquinas'],
    'computadores_ativos' => $totalAtivacoes,
    'aviso' => gerarAvisoLicenca($licenca['data_expiracao']),
    'computador' => [
        'nome_pc' => $ativacao['nome_pc'],
        'usuario_windows' => $ativacao['usuario_windows'],
        'ativado_em' => $ativacao['ativado_em'],
        'ultimo_acesso' => date('Y-m-d H:i:s')
    ]
]);

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;
}

function gerarAvisoLicenca($dataExpiracao)
{
    if (empty($dataExpiracao)) {
        return 'Licença vitalícia ativa.';
    }

    $dias = calcularDiasRestantes($dataExpiracao);

    if ($dias <= 0) {
        return 'Sua licença expirou.';
    }

    if ($dias <= 3) {
        return 'Atenção: sua licença expira em ' . $dias . ' dia(s).';
    }

    if ($dias <= 7) {
        return 'Aviso: sua licença expira em ' . $dias . ' dia(s).';
    }

    return 'Licença ativa.';
}