<?php
declare(strict_types=1);

require_once __DIR__ . '/_bootstrap.php';
require_once __DIR__ . '/../config/mercado_pago_helpers.php';
admin_require_login();

if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    header('Location: pagamentos.php');
    exit;
}

function post_decimal(string $key, float $default = 0.0): float
{
    $raw = str_replace(',', '.', trim((string) ($_POST[$key] ?? '')));
    if ($raw === '') {
        return $default;
    }
    if (!is_numeric($raw) || (float) $raw < 0) {
        throw new RuntimeException('Valor invalido para ' . $key . '.');
    }

    return round((float) $raw, 2);
}

function salvar_config_decimal(PDO $pdo, string $chave, float $valor, string $descricao, string $admin): void
{
    $stmt = $pdo->prepare(
        'INSERT INTO configuracoes (chave, valor, descricao, atualizado_por)
         VALUES (?, ?, ?, ?)
         ON DUPLICATE KEY UPDATE
           valor = VALUES(valor),
           descricao = VALUES(descricao),
           atualizado_por = VALUES(atualizado_por)'
    );
    $stmt->execute([$chave, $valor, $descricao, $admin]);
}

try {
    $pdo = db();
    $admin = admin_current_user();
    $configAtual = mp_config_textual($pdo);

    $pdo->beginTransaction();
    salvar_config_decimal(
        $pdo,
        'mp_ambiente_sandbox',
        (string) ($_POST['ambiente'] ?? 'sandbox') === 'producao' ? 0.0 : 1.0,
        'Mercado Pago em modo sandbox: 1 sim, 0 producao',
        $admin
    );
    salvar_config_decimal(
        $pdo,
        'mp_marketplace_ativo',
        isset($_POST['marketplace_ativo']) ? 1.0 : 0.0,
        'Marketplace Mercado Pago ativo: 1 sim, 0 nao',
        $admin
    );
    salvar_config_decimal(
        $pdo,
        'mp_taxa_gateway_percentual',
        post_decimal('taxa_gateway_percentual', 0.0),
        'Percentual estimado cobrado pelo gateway, usado somente para conferencia',
        $admin
    );

    foreach (admin_mp_config_campos() as $chave => $meta) {
        $valor = trim((string) ($_POST[$chave] ?? ''));
        $sensivel = (bool) ($meta['sensivel'] ?? false);
        if ($sensivel && $valor === '') {
            $valor = (string) ($configAtual[$chave]['valor'] ?? '');
        }

        mp_config_salvar(
            $pdo,
            $chave,
            $valor !== '' ? $valor : null,
            (string) $meta['descricao'],
            $sensivel,
            $admin
        );
    }

    $pdo->commit();
    admin_flash('Configuracao Mercado Pago salva.');
} catch (Throwable $e) {
    if (isset($pdo) && $pdo->inTransaction()) {
        $pdo->rollBack();
    }
    admin_flash('Erro ao salvar Mercado Pago: ' . $e->getMessage(), 'error');
}

header('Location: pagamentos.php');
exit;

function admin_mp_config_campos(): array
{
    return [
        'mp_client_id' => ['descricao' => 'Client ID do aplicativo Mercado Pago', 'sensivel' => false],
        'mp_client_secret' => ['descricao' => 'Client Secret do aplicativo Mercado Pago', 'sensivel' => true],
        'mp_public_key' => ['descricao' => 'Public Key da plataforma para Checkout Transparente', 'sensivel' => false],
        'mp_access_token_plataforma' => ['descricao' => 'Access Token da conta plataforma', 'sensivel' => true],
        'mp_redirect_uri' => ['descricao' => 'URL de retorno OAuth cadastrada no Mercado Pago', 'sensivel' => false],
        'mp_webhook_url' => ['descricao' => 'URL de webhook cadastrada no Mercado Pago', 'sensivel' => false],
    ];
}
