<?php
/**
 * EXEMPLO DE REFACTOR — Modal de Levantamento usando o Design System
 *
 * COMPARAÇÃO:
 *   • Versão actual (1.5.30) em my-account-page.php: ~280 linhas com HTML
 *     inline, CSS inline em quase todos os elementos, e um <script> IIFE
 *     gigante com event delegation custom.
 *
 *   • Esta versão: ~80 linhas, ZERO style="...", ZERO onclick="...",
 *     ZERO <script>. Toda a interactividade vem do design-system.js já
 *     carregado uma vez na página.
 *
 * Quando finalizado, esta função substitui rmbz_render_modals() (a parte
 * do withdrawal-modal). A parte do deposit-modal segue o mesmo padrão.
 */

if ( ! defined( 'ABSPATH' ) ) exit;


/**
 * Renderiza o modal de levantamento.
 *
 * @param bool   $has_pending          Se o utilizador tem pedido em curso
 * @param float  $wallet_balance_mt    Saldo da carteira em MT
 * @param float  $royalties_balance_usd Saldo de royalties em USD
 * @param float  $exchange_rate        Câmbio USD→MT
 * @param string $user_telemovel       Telemóvel do utilizador (para sugestões)
 */
function rmbz_render_withdrawal_modal_v2(
    bool $has_pending = false,
    float $wallet_balance_mt = 0,
    float $royalties_balance_usd = 0,
    float $exchange_rate = 63.50,
    string $user_telemovel = ''
) : string {

    // ── Caso: tem pedido pendente ────────────────────────────────────────
    if ( $has_pending ) {
        $body = rmbz_alert( [
            'variant' => 'warning',
            'icon'    => '⏳',
            'title'   => __( 'Levantamento Pendente', '1mz-for-artists' ),
            'body'    => '<p class="rmbz-text-secondary rmbz-text-sm">'
                       . esc_html__( 'Já possui um pedido em processamento. Aguarde a conclusão antes de pedir outro.', '1mz-for-artists' )
                       . '</p>',
        ] );

        $footer = rmbz_btn( [
            'label'   => __( 'Fechar', '1mz-for-artists' ),
            'variant' => 'ghost',
            'full'    => true,
            'attrs'   => [ 'data-rmbz-action' => 'close' ],
        ] );

        return rmbz_modal( [
            'id'     => 'withdrawal-modal',
            'title'  => __( 'Levantar Fundos', '1mz-for-artists' ),
            'body'   => $body,
            'footer' => $footer,
        ] );
    }

    // ── Caso normal: utilizador pode levantar ───────────────────────────
    $royalties_balance_mt = $royalties_balance_usd * $exchange_rate;

    // Toggle entre origens
    $source_picker = rmbz_pill_group( [
        'name' => __( 'Origem dos fundos', '1mz-for-artists' ),
        'full' => true,
        'options' => [
            [
                'value'  => 'wallet',
                'label'  => __( 'Carteira', '1mz-for-artists' ),
                'icon'   => '💰',
                'target' => 'wd-source-wallet',
                'active' => true,
            ],
            [
                'value'  => 'royalties',
                'label'  => __( 'Royalties', '1mz-for-artists' ),
                'icon'   => '🎵',
                'target' => 'wd-source-royalties',
            ],
        ],
    ] );

    // Painel da Carteira
    $wallet_panel = '
        <div id="wd-source-wallet" class="rmbz-stack">'
        . rmbz_stat( [
            'label'   => __( 'Saldo disponível', '1mz-for-artists' ),
            'amount'  => number_format( $wallet_balance_mt, 2, ',', '.' ),
            'unit'    => 'MT',
            'variant' => 'brand',
        ] )
        . rmbz_field( [
            'name'        => 'wd_amount_wallet',
            'label'       => __( 'Quanto pretende levantar?', '1mz-for-artists' ),
            'type'        => 'number',
            'placeholder' => '0,00',
            'variant'     => 'money',
            'prefix'      => 'MT',
            'attrs'       => [ 'min' => '50', 'max' => (string) $wallet_balance_mt, 'step' => '0.01' ],
            'hint'        => __( 'Mínimo 50 MT.', '1mz-for-artists' ),
        ] )
        . '</div>';

    // Painel dos Royalties
    $royalties_panel = '
        <div id="wd-source-royalties" class="rmbz-stack" hidden>'
        . rmbz_stat( [
            'label'   => __( 'Saldo (USD)', '1mz-for-artists' ),
            'amount'  => number_format( $royalties_balance_usd, 2, '.', ',' ),
            'unit'    => 'USD',
            'trend'   => sprintf(
                /* translators: %s = montante em MT formatado */
                __( '≈ %s MT ao câmbio actual', '1mz-for-artists' ),
                number_format( $royalties_balance_mt, 2, ',', '.' )
            ),
            'trend_direction' => 'flat',
        ] )
        . rmbz_field( [
            'name'        => 'wd_amount_royalties',
            'label'       => __( 'Quanto pretende levantar?', '1mz-for-artists' ),
            'type'        => 'number',
            'placeholder' => '0.00',
            'variant'     => 'money',
            'prefix'      => 'USD',
            'attrs'       => [ 'min' => '5', 'max' => (string) $royalties_balance_usd, 'step' => '0.01' ],
            'hint'        => __( 'Mínimo 5 USD. O valor será convertido para MT no momento do envio.', '1mz-for-artists' ),
        ] )
        . '</div>';

    // Operadora + número
    $operator_picker = rmbz_pill_group( [
        'name' => __( 'Operadora', '1mz-for-artists' ),
        'full' => true,
        'options' => [
            [ 'value' => 'mpesa', 'label' => 'M-Pesa', 'icon' => '🔴' ],
            [ 'value' => 'emola', 'label' => 'E-Mola', 'icon' => '🟢' ],
        ],
    ] );

    $phone_field = rmbz_field( [
        'name'        => 'wd_destination_phone',
        'label'       => __( 'Número de destino', '1mz-for-artists' ),
        'type'        => 'tel',
        'placeholder' => '84... ou 86...',
        'required'    => true,
        'hint'        => __( 'M-Pesa começa por 84/85, E-Mola por 86/87.', '1mz-for-artists' ),
        'attrs'       => [ 'pattern' => '8[4-7][0-9]{7}', 'inputmode' => 'numeric' ],
    ] );

    // Body — usa form porque submete via admin-post
    $body = '
        <form method="post" action="' . esc_url( admin_url( 'admin-post.php' ) ) . '" class="rmbz-stack-lg">
            <input type="hidden" name="action" value="rmbz_request_withdrawal" />
            ' . wp_nonce_field( 'rmbz_request_withdrawal', '_rmbz_wd_nonce', true, false ) . '

            <div class="rmbz-stack">
                <h6>' . esc_html__( 'De onde quer levantar?', '1mz-for-artists' ) . '</h6>
                ' . $source_picker . '
            </div>

            ' . $wallet_panel . '
            ' . $royalties_panel . '

            <div class="rmbz-stack">
                <h6>' . esc_html__( 'Para onde enviar?', '1mz-for-artists' ) . '</h6>
                ' . $operator_picker . '
                ' . $phone_field . '
            </div>
        </form>';

    $footer = rmbz_btn( [
        'label'   => __( 'Cancelar', '1mz-for-artists' ),
        'variant' => 'ghost',
        'attrs'   => [ 'data-rmbz-action' => 'close' ],
    ] )
    . rmbz_btn( [
        'label'   => __( 'Solicitar Levantamento', '1mz-for-artists' ),
        'variant' => 'primary',
        'type'    => 'submit',
        'icon'    => '→',
        'attrs'   => [
            'form'                          => '',  // submetido pelo form acima — set via JS se preciso
            'data-rmbz-loading-on-submit'   => '',
        ],
    ] );

    return rmbz_modal( [
        'id'     => 'withdrawal-modal',
        'title'  => __( 'Levantar Fundos', '1mz-for-artists' ),
        'body'   => $body,
        'footer' => $footer,
    ] );
}


/**
 * ──────────────────────────────────────────────────────────────────────────
 * Como invocar a partir do dashboard:
 *
 *   <?php
 *   echo rmbz_btn([
 *     'label'   => 'Levantar Fundos',
 *     'variant' => 'primary',
 *     'icon'    => '↗',
 *     'attrs'   => ['data-rmbz-modal-open' => 'withdrawal-modal'],
 *   ]);
 *
 *   // No fim do template (uma vez por página):
 *   echo rmbz_render_withdrawal_modal_v2(
 *     $has_pending,
 *     $wallet_balance_mt,
 *     $royalties_balance_usd,
 *     $exchange_rate,
 *     $user_telemovel
 *   );
 *   ?>
 *
 * O botão dispara o modal automaticamente via data-rmbz-modal-open.
 * O modal fecha-se sozinho com Escape, click no overlay, ou click no ×.
 * O botão Submit entra em loading state automático ao clicar.
 *
 * Tudo isto sem UMA SÓ linha de JavaScript inline. ✓
 * ──────────────────────────────────────────────────────────────────────── */
