<?php
/*
 Theme Name: Kadence Child
 Theme URI: https://www.kadencewp.com/
 Description: Tema hijo para Kadence
 Author: P3dris
 Author URI: https://www.kadencewp.com/
 Template: kadence
 Version: 1.0.0
 License:      GNU General Public License v2 or later
 License URI:  http://www.gnu.org/licenses/gpl-2.0.html
 Text Domain:  Kaden tema hijo

*/

/* Añade aqui tus estilos CSS personalizados */

/**
 * IBICENCA.ES — Envío + Checkout v4
 * ─────────────────────────────────────────────────────────────
 * ZONAS Y COMPORTAMIENTO:
 *
 *   Península + Baleares (< 60€)  → Tarifa plana · 24-48h · COD ✓
 *   Península + Baleares (≥ 60€)  → Envío gratis · 24-48h · COD ✓
 *   Canarias + Ceuta + Melilla    → Tarifa fija 15€ · 3-5 días · SIN COD
 *
 * CONFIGURACIÓN PREVIA EN WOOCOMMERCE:
 *   WC → Envío → zona "España":
 *     · Tarifa plana   (precio: el que pongas en WC para península)
 *     · Envío gratuito (sin condición de umbral)
 *   WC → Pagos → activa "Contra reembolso"
 * ─────────────────────────────────────────────────────────────
 */

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

// ── AJUSTES ──────────────────────────────────────────────────
define( 'IB_UMBRAL',       60.00 );
define( 'IB_ISLAS_PRECIO', 15.00 );

// Prefijos de CP: Canarias (35, 38), Ceuta (51), Melilla (52)
// Baleares (07) → envío normal, SÍ tiene COD
define( 'IB_CP_SIN_COD', [ '35', '38', '51', '52' ] );


// ── 1. FILTRO DE MÉTODOS DE ENVÍO ────────────────────────────
// Solo toca métodos de ENVÍO, nunca métodos de pago
add_filter( 'woocommerce_package_rates', 'ib_envio', 100 );

function ib_envio( $rates ) {

    if ( empty( $rates ) ) return $rates;

    $total = (float) WC()->cart->get_subtotal();
    $cp    = (string) WC()->customer->get_shipping_postcode();
    $pref  = substr( $cp, 0, 2 );

    $sin_cod  = in_array( $pref, IB_CP_SIN_COD, true );   // Canarias/Ceuta/Melilla
    $baleares = in_array( $pref, IB_CP_BALEARES, true );  // Baleares

    // ── Canarias · Ceuta · Melilla ───────────────────────────
    // Tarifa fija 15€, sin COD (el COD se deshabilita en bloque 2)
    if ( $sin_cod ) {
        foreach ( $rates as $id => $rate ) {
            if ( strpos( $id, 'flat_rate' ) !== false ) {
                $rate->cost   = IB_ISLAS_PRECIO;
                $rate->taxes  = [];
                $rate->label  = 'Envío Canarias / Ceuta / Melilla (3-5 días)';
                return [ $id => $rate ];
            }
        }
        return $rates; // fallback
    }

    // ── Baleares ─────────────────────────────────────────────
    // Mismo umbral que península pero tarifa fija para islas
    if ( $baleares ) {
        if ( $total >= IB_UMBRAL ) {
            foreach ( $rates as $id => $rate ) {
                if ( $rate->method_id === 'free_shipping' ) {
                    $rate->label = 'Envío gratuito Baleares (24-48h)';
                    return [ $id => $rate ];
                }
            }
        }
        foreach ( $rates as $id => $rate ) {
            if ( strpos( $id, 'flat_rate' ) !== false ) {
                $rate->label = 'Envío Baleares (24-48h)';
                return [ $id => $rate ];
            }
        }
        return $rates;
    }

    // ── Península (y CP vacío / desconocido) ─────────────────
    if ( $total >= IB_UMBRAL ) {
        foreach ( $rates as $id => $rate ) {
            if ( $rate->method_id === 'free_shipping' ) {
                $rate->label = 'Envío gratuito (24-48h)';
                return [ $id => $rate ];
            }
        }
    }

    foreach ( $rates as $id => $rate ) {
        if ( strpos( $id, 'flat_rate' ) !== false ) {
            $rate->label = 'Envío estándar (24-48h)';
            return [ $id => $rate ];
        }
    }

    return $rates; // fallback final: devuelve todo antes de bloquear
}


// ── 2. DESHABILITAR CONTRA REEMBOLSO EN CANARIAS/CEUTA/MELILLA
// El COD es un método de PAGO, no de envío.
// Se filtra con su propio hook, completamente separado del bloque 1.
add_filter( 'woocommerce_available_payment_gateways', 'ib_cod_segun_zona' );

function ib_cod_segun_zona( $gateways ) {

    // Solo actúa en el checkout, no en el admin
    if ( is_admin() ) return $gateways;

    $cp   = (string) WC()->customer->get_shipping_postcode();
    $pref = substr( $cp, 0, 2 );

    if ( in_array( $pref, IB_CP_SIN_COD, true ) ) {
        // Quita el COD solo para estas zonas
        unset( $gateways['cod'] );
    }

    return $gateways;
}


// ── 3. COMPRA COMO INVITADO ──────────────────────────────────
add_filter( 'woocommerce_checkout_registration_required', '__return_false' );
add_filter( 'woocommerce_checkout_registration_enabled',  '__return_true'  );


// ── 4. DESBLOQUEAR STORE API (carrito en bloques) ────────────
add_filter( 'rest_authentication_errors', 'ib_permitir_wc_api', 99 );

function ib_permitir_wc_api( $result ) {
    $ruta = $_SERVER['REQUEST_URI'] ?? '';
    if ( strpos( $ruta, '/wc/store/' ) !== false ||
         strpos( $ruta, '/wc/v3/' )    !== false ) {
        return null;
    }
    return $result;
}
