<?php
/**
 * Plugin Name: DL25 Shop Cards Fix
 * Description: Melhora botões e hover nos cartões da loja / categorias sem tocar em produtos relacionados nem na página de produto.
 * Version: 1.0.0
 * Author: DL25
 * Text Domain: dl25-shop-fix
 */

// Exit if accessed directly
if ( ! defined( 'ABSPATH' ) ) exit;

/**
 * Regista e injeta CSS + JS SOMENTE nas páginas shop / category / tag (arquivos de produto)
 */
add_action( 'wp_enqueue_scripts', 'dl25_enqueue_shop_styles_scripts', 5 );
function dl25_enqueue_shop_styles_scripts() {
    if ( ! function_exists('is_shop') ) return;

    // Só carregar em ficheiras de loja/categorias/tags - NUNCA na single product
    if ( is_shop() || is_product_category() || is_product_tag() || is_post_type_archive( 'product' ) ) {

        // Regista um handle vazio para possibilitar inline style com prioridade
        wp_register_style( 'dl25-shop-fix', false );
        wp_enqueue_style( 'dl25-shop-fix' );

        $css = "
/* DL25 - estilos aplicados APENAS em loja/categorias (NÃO .related, NÃO single) */

/* alvo estrito: listas de produtos que NÃO têm a classe .related */
body.woocommerce ul.products:not(.related) li.product {
    display: flex !important;
    flex-direction: column !important;
    height: 100% !important;
    transition: transform .24s ease, box-shadow .24s ease !important;
    will-change: transform, box-shadow;
}

/* interior flex comum (varios temas usam nomes diferentes) */
body.woocommerce ul.products:not(.related) li.product .ct-product-card,
body.woocommerce ul.products:not(.related) li.product .product-inner,
body.woocommerce ul.products:not(.related) li.product .product-card,
body.woocommerce ul.products:not(.related) li.product .product-wrap {
    display: flex !important;
    flex-direction: column !important;
    flex: 1 1 auto !important;
}

/* proteger topo (imagem / titulo / preco) */
body.woocommerce ul.products:not(.related) li.product .ct-product-thumbnail,
body.woocommerce ul.products:not(.related) li.product .product-thumb,
body.woocommerce ul.products:not(.related) li.product .ct-product-content,
body.woocommerce ul.products:not(.related) li.product .woocommerce-loop-product__title,
body.woocommerce ul.products:not(.related) li.product .price {
    flex-shrink: 0 !important;
}

/* container de ações vai para o fundo do card */
body.woocommerce ul.products:not(.related) li.product .ct-product-actions,
body.woocommerce ul.products:not(.related) li.product .product-actions,
body.woocommerce ul.products:not(.related) li.product .loop-add-to-cart {
    margin-top: auto !important;
    display: flex !important;
    align-items: center !important;
    gap: 8px !important;
}

/* hover suave no cartão */
body.woocommerce ul.products:not(.related) li.product:hover {
    transform: translateY(-6px) !important;
    box-shadow: 0 10px 28px rgba(11,22,32,0.08) !important;
}

/* animação da imagem */
body.woocommerce ul.products:not(.related) li.product .ct-product-thumbnail img,
body.woocommerce ul.products:not(.related) li.product .product-thumb img {
    transition: transform .35s cubic-bezier(.2,.8,.2,1) !important;
    backface-visibility: hidden;
}
body.woocommerce ul.products:not(.related) li.product:hover .ct-product-thumbnail img,
body.woocommerce ul.products:not(.related) li.product:hover .product-thumb img {
    transform: translateY(-4px) scale(1.02) !important;
}

/* BOTÃO adicionar - apenas na lista da loja/categorias (NÃO afeta single, NÃO afeta related) */
body.woocommerce ul.products:not(.related) li.product .button,
body.woocommerce ul.products:not(.related) li.product a.add_to_cart_button,
body.woocommerce ul.products:not(.related) li.product .ajax_add_to_cart {
    background: transparent !important;
    border: 2px solid #ff6b6b !important;
    color: #ff6b6b !important;
    padding: 8px 15px !important;
    border-radius: 8px !important;
    font-weight: 600 !important;
    text-transform: uppercase !important;
    font-size: 14px !important;
    line-height: 1 !important;
    transition: transform .18s ease, background .18s ease, color .18s ease !important;
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
    white-space: nowrap !important;
}

/* hover do botão */
body.woocommerce ul.products:not(.related) li.product .button:hover,
body.woocommerce ul.products:not(.related) li.product a.add_to_cart_button:hover {
    transform: scale(1.05) !important;
    background: #ff6b6b !important;
    color: #fff !important;
    border-color: #ff6b6b !important;
}

/* wishlist: apenas layout leve, não remove nada */
body.woocommerce ul.products:not(.related) li.product .tinv-wishlist,
body.woocommerce ul.products:not(.related) li.product .tinvwl_add_to_wishlist {
    margin-top: 8px !important;
    display: inline-flex !important;
    gap: 6px !important;
    align-items: center !important;
    font-size: 13px !important;
}

/* responsividade: desliga elevação no mobile para performance */
@media (max-width: 768px) {
    body.woocommerce ul.products:not(.related) li.product { transform: none !important; box-shadow: none !important; }
    body.woocommerce ul.products:not(.related) li.product .button { padding: 9px 12px !important; font-size: 13px !important; }
    body.woocommerce ul.products:not(.related) li.product .ct-product-thumbnail img,
    body.woocommerce ul.products:not(.related) li.product .product-thumb img { transform: none !important; }
}
        ";

        wp_add_inline_style( 'dl25-shop-fix', $css );

        // Regista script (vai ser enqueued apenas aqui)
        wp_register_script( 'dl25-shop-fix-js', false );
        wp_enqueue_script( 'dl25-shop-fix-js' );

        $js = "
/* DL25 - JS de segurança: move botões quando o tema os injeta ao lado do preço.
   Corre apenas em páginas de loja / categorias (enfileirado condicionalmente). */

(function(){
    'use strict';

    // Helper: encontra todos os li.product dentro de listas que NÃO sejam .related
    function getShopItems() {
        return document.querySelectorAll('body.woocommerce ul.products:not(.related) li.product');
    }

    function moveButtons() {
        var items = getShopItems();
        items.forEach(function(li){
            try {
                // possíveis seletores para o botão
                var btn = li.querySelector('a.add_to_cart_button, .ajax_add_to_cart, .button');
                if (!btn) return;

                // se o botão já está dentro de um container de ações, não fazemos nada
                var withinActions = btn.closest('.ct-product-actions, .product-actions, .loop-add-to-cart');
                if (withinActions) return;

                // procura um container de ações no li
                var actions = li.querySelector('.ct-product-actions, .product-actions, .loop-add-to-cart');
                if (actions) {
                    actions.appendChild(btn);
                    return;
                }

                // se não existir container, criamos um no fim do li (apenas visual)
                var created = document.createElement('div');
                created.className = 'ct-product-actions';
                created.style.display = 'flex';
                created.style.marginTop = 'auto';
                created.style.gap = '8px';
                li.appendChild(created);
                created.appendChild(btn);
            } catch(e){
                // swallow errors - não queremos quebrar front-end
                // console && console.log && console.log(e);
            }
        });
    }

    // run on DOM ready + observe (para AJAX)
    document.addEventListener('DOMContentLoaded', moveButtons, false);
    window.addEventListener('load', moveButtons, false);

    // observer para mudanças dinâmicas como widgets/filtros AJAX
    var obs = new MutationObserver(function(m){ moveButtons(); });
    obs.observe(document.body, { childList: true, subtree: true });
})();
        ";

        wp_add_inline_script( 'dl25-shop-fix-js', $js );
    }
}

   ============================================================ */

