<?php
require_once __DIR__ . '/../models/model_pedido.php';
require_once __DIR__ . '/PedidoEstadoHelper.php';

use MercadoPago\Client\Payment\PaymentClient;

/**
 * Actualiza pedidos según el estado de un pago de Mercado Pago.
 */
class MercadoPagoPedidoService
{
    public static function procesarPagoPorId(string $paymentId): array
    {
        if (!defined('MERCADOPAGO_ACCESS_TOKEN')) {
            return ['ok' => false, 'message' => 'Token MP no configurado'];
        }

        MercadoPago\MercadoPagoConfig::setAccessToken(MERCADOPAGO_ACCESS_TOKEN);

        $client = new PaymentClient();
        $payment = $client->get($paymentId);

        if (!$payment || !isset($payment->status)) {
            return ['ok' => false, 'message' => 'Pago no encontrado en MP'];
        }

        $idPedido = null;
        if (!empty($payment->external_reference)) {
            $idPedido = (int)$payment->external_reference;
        }

        $pedidoModel = new Pedido();
        $pedido = null;

        if ($idPedido > 0) {
            $pedido = $pedidoModel->getPedidoById($idPedido);
        }
        if (!$pedido) {
            $pedido = $pedidoModel->getPedidoByPaymentId($paymentId);
        }

        if (!$pedido) {
            return ['ok' => false, 'message' => 'Pedido no encontrado para payment ' . $paymentId];
        }

        $pedidoModel->aplicarEstadoMercadoPago((int)$pedido['id_pedido'], $payment->status, $paymentId);

        return [
            'ok' => true,
            'id_pedido' => (int)$pedido['id_pedido'],
            'status' => $payment->status,
        ];
    }
}
