<?php
/**
 * Webhook do Mercado Pago (assinaturas).
 * Configure em: Mercado Pago > Sua aplicação > Webhooks
 *   URL: {BASE_URL}api/webhook.php   |  Evento: subscription_preapproval
 *
 * A notificação traz só o id; o status é sempre confirmado consultando a API
 * (nunca se confia no corpo da notificação).
 */

require_once __DIR__ . '/db.php';
require_once __DIR__ . '/mp.php';

$corpo = corpo_json();
$tipo = $_GET['type'] ?? $corpo['type'] ?? '';
$id = $_GET['data_id'] ?? $_GET['id'] ?? ($corpo['data']['id'] ?? '');

if ($id === '' || modo_demo()) {
    responder(['ok' => true]);
}

if (!in_array($tipo, ['subscription_preapproval', 'subscription_authorized_payment', 'payment'], true)) {
    responder(['ok' => true, 'ignorado' => $tipo]);
}

// Pagamento de renovação: o id é do pagamento; o vínculo vem do preapproval.
$preapproval_id = $id;
if ($tipo !== 'subscription_preapproval') {
    $pg = mp_request('GET', '/authorized_payments/' . $id);
    $preapproval_id = $pg['preapproval_id'] ?? '';
    if ($preapproval_id === '') {
        responder(['ok' => true, 'sem_preapproval' => true]);
    }
}

$resp = mp_request('GET', '/preapproval/' . $preapproval_id);
if (($resp['_http'] ?? 0) >= 300 || empty($resp['status'])) {
    responder(['ok' => false], 200); // 200 para o MP não repetir eternamente
}

$usuario_id = (int) ($resp['external_reference'] ?? 0);
if ($usuario_id > 0) {
    $anterior = usuario_por_id($usuario_id);
    $st = db()->prepare(
        "UPDATE usuarios SET mp_preapproval_id = ?, sub_status = ?,
         sub_verificada_em = datetime('now') WHERE id = ?"
    );
    $st->execute([$preapproval_id, $resp['status'], $usuario_id]);

    // boas-vindas na primeira ativação (melhor esforço; silencioso sem SMTP)
    if ($resp['status'] === 'authorized' && $anterior && $anterior['sub_status'] !== 'authorized') {
        require_once __DIR__ . '/email.php';
        enviar_email(
            $anterior['email'],
            'Sua casa está aberta — Habitar',
            email_moldura(
                'Bem-vindo(a) ao Habitar',
                '<p>Olá, ' . htmlspecialchars($anterior['nome']) . '.</p>'
                . '<p>Sua assinatura está ativa e todos os cômodos da sua casa interior '
                . 'estão abertos. Entre quando quiser:</p>'
                . '<p><a href="' . BASE_URL . 'casa" style="color:#7C5F45;font-weight:bold">'
                . 'Entrar na minha casa</a></p>'
                . '<p>Para cancelar a assinatura, acesse Assinaturas na sua conta do Mercado Pago.</p>'
            )
        );
    }
}

responder(['ok' => true]);
