<?php

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

// 1. REGISTAR O NOVO TIPO DE POST PARA PEDIDOS DE PAGAMENTO
function imz_register_payout_request_cpt() {
    register_post_type('imz_payout', [
        'label' => 'Pedidos de Pagamento',
        'public' => false,
        'show_ui' => true,
        'show_in_menu' => imz_admin_parent_slug(),
        'supports' => ['title'],
        'menu_icon' => 'dashicons-money-alt',
        'capabilities' => ['create_posts' => 'do_not_allow'],
        'map_meta_cap' => true,
        'labels' => [
            'name' => 'Pedidos de Pagamento',
            'singular_name' => 'Pedido de Pagamento',
            'menu_name' => 'Pagamentos',
            'all_items' => 'Todos os Pedidos',
            'edit_item' => 'Ver Pedido'
        ]
    ]);
}
add_action('init', 'imz_register_payout_request_cpt');


// 2. ADICIONAR COLUNAS PERSONALIZADAS À LISTA DE PEDIDOS NO ADMIN
add_filter('manage_imz_payout_posts_columns', function($columns) {
    return [
        'cb' => $columns['cb'],
        'title' => 'Pedido',
        'payout_artist' => 'Artista',
        'payout_amount' => 'Valor',
        'payout_status' => 'Status',
        'date' => 'Data'
    ];
});

add_action('manage_imz_payout_posts_custom_column', function($column, $post_id) {
    switch ($column) {
        case 'payout_artist':
            $artist_id = get_post_meta($post_id, '_artist_id', true);
            $artist = get_user_by('id', $artist_id);
            if ($artist) {
                echo '<a href="' . get_edit_user_link($artist_id) . '">' . esc_html($artist->display_name) . '</a>';
            }
            break;
        case 'payout_amount':
            $amount = get_post_meta($post_id, '_payout_amount', true);
            echo '<strong>' . esc_html(number_format((float)$amount, 2)) . ' MT</strong>';
            break;
        case 'payout_status':
            $status = get_post_meta($post_id, '_payout_status', true);
            echo '<span class="imz-payout-status-' . esc_attr($status) . '">' . esc_html(ucfirst($status)) . '</span>';
            break;
    }
}, 10, 2);


// 3. ADICIONAR CAIXA DE GESTÃO (META BOX) NA PÁGINA DE EDIÇÃO DO PEDIDO
add_action('add_meta_boxes_imz_payout', function($post) {
    add_meta_box(
        'imz_payout_details', 'Detalhes do Pedido de Pagamento',
        'imz_render_payout_details_box', 'imz_payout', 'normal', 'high'
    );
});

function imz_render_payout_details_box($post) {
    wp_nonce_field('imz_save_payout_details', 'imz_payout_nonce');
    $artist_id = get_post_meta($post->ID, '_artist_id', true);
    $artist = get_user_by('id', $artist_id);
    $amount = get_post_meta($post->ID, '_payout_amount', true);
    $status = get_post_meta($post->ID, '_payout_status', true);
    
    $payout_method = get_user_meta($artist_id, '_payout_method', true);
    $payout_details = get_user_meta($artist_id, '_payout_details', true);

    echo '<p><strong>Artista:</strong> ' . esc_html($artist->display_name ?? 'N/A') . '</p>';
    echo '<p><strong>Valor Solicitado:</strong> ' . esc_html(number_format((float)$amount, 2)) . ' MT</p>';
    echo '<hr style="border: none; border-top: 1px solid #ddd; margin: 15px 0;">';
    echo '<h4><strong>Dados para Efetuar o Pagamento:</strong></h4>';
    echo '<p><strong>Método Preferido:</strong> ' . '<strong>' . esc_html(strtoupper($payout_method)) . '</strong>' . '</p>';
    echo '<p><strong>Contacto/Número:</strong> ' . '<strong>' . esc_html($payout_details) . '</strong>' . '</p>';
    echo '<hr style="border: none; border-top: 1px solid #ddd; margin: 15px 0;">';

    if ($status === 'pendente') {
        ?>
        <label for="payout_status"><strong>Mudar Status do Pedido:</strong></label><br>
        <select name="payout_status" id="payout_status">
            <option value="pendente" <?php selected($status, 'pendente'); ?>>Pendente</option>
            <option value="concluido" <?php selected($status, 'concluido'); ?>>Concluído</option>
            <option value="cancelado" <?php selected($status, 'cancelado'); ?>>Cancelado</option>
        </select>
        <p class="description">
            - <strong>Concluído:</strong> Use após ter enviado o dinheiro. Esta ação é final.<br>
            - <strong>Cancelado:</strong> Rejeita o pedido e devolve o valor ao saldo do artista.
        </p>
        <?php
    } else {
        ?>
        <p><strong>Status Final:</strong> <span class="imz-payout-status-<?php echo esc_attr($status); ?>"><?php echo esc_html(ucfirst($status)); ?></span></p>
        <p class="description">Este pedido já foi processado e o seu status não pode ser alterado.</p>
        <?php
    }
}

// 4. LÓGICA PARA SALVAR OS DETALHES E ATUALIZAR SALDOS
add_action('save_post_imz_payout', function($post_id) {
    if (!isset($_POST['imz_payout_nonce']) || !wp_verify_nonce($_POST['imz_payout_nonce'], 'imz_save_payout_details') || (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) || !current_user_can('edit_post', $post_id)) {
        return;
    }

    $old_status = get_post_meta($post_id, '_payout_status', true);
    
    // Apenas permite salvar se o status antigo for 'pendente'
    if ($old_status !== 'pendente') {
        return;
    }
    
    $new_status = isset($_POST['payout_status']) ? sanitize_text_field($_POST['payout_status']) : $old_status;

    if ($old_status !== $new_status) {
        update_post_meta($post_id, '_payout_status', $new_status);
        
        // Lógica para devolver o saldo se um pedido for cancelado
        if ($new_status === 'cancelado') {
            $artist_id = get_post_meta($post_id, '_artist_id', true);
            $amount_to_return = (float) get_post_meta($post_id, '_payout_amount', true);
            
            // Subtrai o valor do saldo pendente do artista, efetivamente devolvendo-o ao saldo disponível
            $pending_balance = (float) get_user_meta($artist_id, '_artist_pending_payout', true);
            update_user_meta($artist_id, '_artist_pending_payout', $pending_balance - $amount_to_return);
        }
    }
});
