<?php
// Función para cargar Font Awesome si es necesario
function cargar_font_awesome_si_es_necesario() {
    if (!wp_script_is('font-awesome', 'enqueued')) {
        wp_enqueue_style('font-awesome', 'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css', array(), null);
    }
}
add_action('wp_enqueue_scripts', 'cargar_font_awesome_si_es_necesario');

// Función para cargar jQuery si es necesario
function cargar_jquery_si_es_necesario() {
    if (!wp_script_is('jquery', 'enqueued')) {
        // Si jQuery no está cargado, encolamos la versión incluida en WordPress
        wp_enqueue_script('jquery');
    }
}
add_action('wp_enqueue_scripts', 'cargar_jquery_si_es_necesario');

// Definir constante para el nombre de la taxonomía
define('CATEGORIA_USUARIO', 'categoria_usuario');

// Registrar una taxonomía personalizada para usuarios
function registrar_taxonomia_usuario() {
    register_taxonomy(
        CATEGORIA_USUARIO,
        'user',
        array(
            'label' => 'Categoría de Usuario',
            'rewrite' => array('slug' => 'categoria-usuario'),
            'hierarchical' => true,
        )
    );
}
add_action('init', 'registrar_taxonomia_usuario');

// Agregar la pestaña de categorías de usuarios
function agregar_pestana_categorias_usuario() {
    add_users_page('Categorías de Usuarios', 'Categorías de Usuarios', 'edit_users', 'edit-tags.php?taxonomy=' . CATEGORIA_USUARIO);
}
add_action('admin_menu', 'agregar_pestana_categorias_usuario');


// Mostrar campo de categoría en el perfil de usuario
function mostrar_campo_categoria_usuario($user) {
    $categoria_usuario = get_user_meta($user->ID, 'categoria_usuario', true);
    ?>
    <h3>Categoría de Usuario</h3>
    <table class="form-table">
        <tr>
            <th><label for="categoria_usuario_nueva">Seleccionar Categoría</label></th>
            <td>
                <?php
                // Obtener todas las categorías de usuario
                $terms = get_terms('categoria_usuario', array('hide_empty' => false));

                if (!empty($terms)) {
                    ?>
                    <select name="categoria_usuario" id="categoria_usuario">
                        <option value="">Seleccionar Categoría</option>
                        <?php
                        foreach ($terms as $term) {
                            echo '<option value="' . esc_attr($term->slug) . '" ' . selected($categoria_usuario, $term->slug, false) . '>' . esc_html($term->name) . '</option>';
                        }
                        ?>
                    </select>
                    <?php
                } else {
                    echo 'No hay categorías disponibles. Por favor, crea categorías en la sección de Categorías de Usuarios.';
                }
                ?>
            </td>
        </tr>
    </table>
    <?php
}
add_action('show_user_profile', 'mostrar_campo_categoria_usuario');
add_action('edit_user_profile', 'mostrar_campo_categoria_usuario');

// Guardar la categoría y relacionar al usuario al actualizar el perfil de usuario
function guardar_categoria_usuario($user_id) {
    if (current_user_can('edit_user', $user_id)) {
        $categoria_seleccionada = sanitize_text_field($_POST['categoria_usuario']);

        // Guardar la categoría en el perfil del usuario
        update_user_meta($user_id, 'categoria_usuario', $categoria_seleccionada);

        // Asignar al usuario a la categoría
        wp_set_object_terms($user_id, $categoria_seleccionada, 'categoria_usuario', false);
    }
}
add_action('personal_options_update', 'guardar_categoria_usuario');
add_action('edit_user_profile_update', 'guardar_categoria_usuario');

// Mostrar campo de foto de perfil en el perfil de usuario
function mostrar_campo_foto_perfil($user) {
    $foto_perfil = get_user_meta($user->ID, 'foto_perfil', true);
    ?>
    <h3>Foto de Perfil</h3>
    <table class="form-table">
        <tr>
            <th><label for="foto_perfil">Seleccionar Foto</label></th>
            <td>
                <input type="text" name="foto_perfil" id="foto_perfil" value="<?php echo esc_attr($foto_perfil); ?>" class="regular-text" />
                <p class="description">Introduce la URL de tu foto de perfil.</p>
            </td>
        </tr>
    </table>
    <?php
}
add_action('show_user_profile', 'mostrar_campo_foto_perfil');
add_action('edit_user_profile', 'mostrar_campo_foto_perfil');

// Guardar la foto de perfil al actualizar el perfil de usuario
function guardar_foto_perfil($user_id) {
    if (current_user_can('edit_user', $user_id)) {
        $foto_perfil = sanitize_text_field($_POST['foto_perfil']);
        update_user_meta($user_id, 'foto_perfil', $foto_perfil);
    }
}
add_action('personal_options_update', 'guardar_foto_perfil');
add_action('edit_user_profile_update', 'guardar_foto_perfil');

// Agregar nueva columna en la página de usuarios
function agregar_columna_categoria_usuario($columns) {
    $columns['categoria_usuario'] = 'Categoría';
    return $columns;
}
add_filter('manage_users_columns', 'agregar_columna_categoria_usuario');

// Mostrar contenido en la nueva columna sin enlace de filtrado
function mostrar_contenido_columna_categoria_usuario($value, $column_name, $user_id) {
    if ('categoria_usuario' === $column_name) {
        $categoria_usuario = wp_get_object_terms($user_id, 'categoria_usuario');
        if (!empty($categoria_usuario)) {
            $categoria = array_shift($categoria_usuario);
            $categoria_nombre = esc_html($categoria->name);

            return $categoria_nombre;
        } else {
            return 'Sin categoría';
        }
    }
    return $value;
}
add_action('manage_users_custom_column', 'mostrar_contenido_columna_categoria_usuario', 10, 3);

// Shortcode para mostrar usuarios por categoría
function mostrar_usuarios_por_categoria_shortcode($atts) {
    ob_start();

    // Muestra las categorías disponibles
    $categorias = get_terms('categoria_usuario', array('hide_empty' => false));

    if (!empty($categorias)) {
        echo '<div class="categorias-filtro">';
        echo '<a class="filtro-categoria" data-categoria="todas" href="#">Todas las categorías</a>';

        foreach ($categorias as $categoria) {
            echo '<a class="filtro-categoria" data-categoria="' . esc_attr(sanitize_title($categoria->name)) . '" href="#">' . esc_html($categoria->name) . '</a>';
        }

        echo '</div>';
    }

    // Muestra las cajas de usuarios
    $args = array(
        'role' => 'subscriber', // Cambia el rol según tus necesidades
    );

    // Realiza la consulta de usuarios
    $usuarios = get_users($args);

    if (!empty($usuarios)) {
        echo '<div class="user-boxes-wrapper">';

        foreach ($usuarios as $usuario) {
            $usuario_data = get_userdata($usuario->ID);

            // Obtenemos la URL de la foto de perfil
            $foto_perfil_url = esc_url(get_user_meta($usuario->ID, 'foto_perfil', true));
            $foto_perfil_html = '<img src="' . $foto_perfil_url . '" alt="Foto de perfil" width="300" height="200"/ class="user-avatar">';

            // Obtenemos la categoría del usuario
            $categoria_usuario = wp_get_object_terms($usuario->ID, 'categoria_usuario');
            $categoria = !empty($categoria_usuario) ? array_shift($categoria_usuario)->name : 'Sin categoría';

            // Unificamos el campo "Nombre" y "Apellidos"
            $nombre_completo = esc_html($usuario_data->first_name . ' ' . $usuario_data->last_name);

            $email = $usuario_data->user_email;
            $pagina_web = esc_url($usuario_data->user_url);
            
            // Nueva: Campos de redes sociales
            $whatsapp = esc_html(get_user_meta($usuario->ID, 'whatsapp', true));
            $facebook = esc_html(get_user_meta($usuario->ID, 'facebook', true));
            $instagram = esc_html(get_user_meta($usuario->ID, 'instagram', true));
            $linkedin = esc_html(get_user_meta($usuario->ID, 'linkedin', true));
            
            // Nueva: Biografía del usuario
            $biografia = esc_html(get_user_meta($usuario->ID, 'description', true));

            echo '<div class="user-box categoria-' . esc_attr(sanitize_title($categoria)) . '">';
            echo '<div class="user-avatar">' . $foto_perfil_html . '</div>';
            echo '<div class="user-info">';
            echo '<div class="categoria" data-label="Categoría"><span class="filtro-categoria" data-categoria="' . esc_attr(sanitize_title($categoria)) . '">' . esc_html($categoria) . '</span></div>';
            echo '<div class="nombre" data-label="Nombre"><i class="fas fa-user"></i> ' . $nombre_completo . '</div>';
            echo '<div class="email" data-label="Email"><i class="fas fa-envelope"></i> ' . esc_html($email) . '</div>';
            echo '<div class="pagina-web" data-label="Página Web"><i class="fas fa-globe"></i> ' . esc_html($pagina_web) . '</div>';
            
           // Nueva: Campos de redes sociales
            echo '<div class="redes-sociales" data-label="Redes Sociales">';
            if (!empty($whatsapp)) {
                echo '<div class="whatsapp"><a href="' . esc_url($whatsapp) . '" target="_blank" rel="noopener noreferrer"><i class="fab fa-whatsapp"></i></a></div>';
            }
            if (!empty($facebook)) {
                echo '<div class="facebook"><a href="' . esc_url($facebook) . '" target="_blank" rel="noopener noreferrer"><i class="fab fa-facebook"></i></a></div>';
            }
            if (!empty($instagram)) {
                echo '<div class="instagram"><a href="' . esc_url($instagram) . '" target="_blank" rel="noopener noreferrer"><i class="fab fa-instagram"></i></a></div>';
            }
            if (!empty($linkedin)) {
                echo '<div class="linkedin"><a href="' . esc_url($linkedin) . '" target="_blank" rel="noopener noreferrer"><i class="fab fa-linkedin"></i></a></div>';
            }
            echo '</div>';
            
            // Nueva: Biografía del usuario
            if (!empty($biografia)) {
                echo '<div class="biografia" data-label="Biografía"><i class="fas fa-info-circle"></i> ' . $biografia . '</div>';
            }

            echo '</div>';
            echo '</div>';
        }

        echo '</div>';
    } else {
        echo 'No hay usuarios disponibles.';
    }

    // Agrega el script jQuery para manejar el filtrado
    ?>
    <script>
        jQuery(document).ready(function($) {
            $('.filtro-categoria').on('click', function() {
                var categoria = $(this).data('categoria');

                // Oculta todos los usuarios
                $('.user-box').hide();

                // Muestra los usuarios de la categoría seleccionada
                if (categoria === 'todas') {
                    $('.user-box').show();
                } else {
                    $('.categoria-' + categoria).show();
                }
            });
        });
    </script>
    <?php

    return ob_get_clean();
}
add_shortcode('mostrar_usuarios_por_categoria', 'mostrar_usuarios_por_categoria_shortcode');

// Mostrar campos de redes sociales en el perfil de usuario
function mostrar_campos_redes_sociales($user) {
    ?>
    <h3>Redes Sociales</h3>
    <table class="form-table">
        <tr>
            <th><label for="whatsapp">WhatsApp</label></th>
            <td>
                <input type="text" name="whatsapp" id="whatsapp" value="<?php echo esc_attr(get_user_meta($user->ID, 'whatsapp', true)); ?>" class="regular-text" />
                <p class="description">Ingresa la URL de WhatsApp.</p>
            </td>
        </tr>
        <tr>
            <th><label for="facebook">Facebook</label></th>
            <td>
                <input type="text" name="facebook" id="facebook" value="<?php echo esc_attr(get_user_meta($user->ID, 'facebook', true)); ?>" class="regular-text" />
                <p class="description">Ingresa la URL de Facebook.</p>
            </td>
        </tr>
        <tr>
            <th><label for="instagram">Instagram</label></th>
            <td>
                <input type="text" name="instagram" id="instagram" value="<?php echo esc_attr(get_user_meta($user->ID, 'instagram', true)); ?>" class="regular-text" />
                <p class="description">Ingresa la URL de Instagram.</p>
            </td>
        </tr>
        <tr>
            <th><label for="linkedin">LinkedIn</label></th>
            <td>
                <input type="text" name="linkedin" id="linkedin" value="<?php echo esc_attr(get_user_meta($user->ID, 'linkedin', true)); ?>" class="regular-text" />
                <p class="description">Ingresa la URL de LinkedIn.</p>
            </td>
        </tr>
    </table>
    <?php
}
add_action('show_user_profile', 'mostrar_campos_redes_sociales');
add_action('edit_user_profile', 'mostrar_campos_redes_sociales');

// Guardar URLs de redes sociales al actualizar el perfil de usuario
function guardar_redes_sociales($user_id) {
    if (current_user_can('edit_user', $user_id)) {
        $whatsapp = sanitize_text_field($_POST['whatsapp']);
        $facebook = sanitize_text_field($_POST['facebook']);
        $instagram = sanitize_text_field($_POST['instagram']);
        $linkedin = sanitize_text_field($_POST['linkedin']);

        update_user_meta($user_id, 'whatsapp', $whatsapp);
        update_user_meta($user_id, 'facebook', $facebook);
        update_user_meta($user_id, 'instagram', $instagram);
        update_user_meta($user_id, 'linkedin', $linkedin);
    }
}
add_action('personal_options_update', 'guardar_redes_sociales');
add_action('edit_user_profile_update', 'guardar_redes_sociales');



// Definir una función para agregar estilos a la tabla de usuarios
function estilo_tabla_usuarios() {
    echo '<style>
    .categorias-filtro {
        text-align: center;
        margin-bottom: 20px;
    }

    .filtro-categoria {
        display: inline-block;
        padding: 8px 16px;
        margin: 5px;
        background-color: Transparent; /* Color de fondo del botón */
        color: #4286F3; /* Color del texto del botón */
        text-decoration: none;
        border: 1px solid #4286F3;
        border-radius: 4px;
        cursor: pointer;
    }

    .filtro-categoria:hover {
        background-color: #4286F3; /* Cambia el color de fondo al pasar el ratón por encima */
		color:white;
    }

    .user-boxes-wrapper {
        display: flex;
        flex-wrap: wrap;
        justify-content: space-between;
        max-width: 800px; /* Ajusta el ancho máximo según sea necesario */
        margin: 0 auto; /* Centra el contenedor de usuarios */
    }

  .user-box {
        width: calc(33.33% - 20px);
        margin-bottom: 20px;
        border: 1px solid #ddd;
        padding: 50px;
        box-sizing: border-box;
        text-align: center;
        transition: box-shadow 0.3s ease;
    }

    .user-box .user-avatar {
        margin-bottom: 10px;
		text-align:left;
		
    }
	
	.user-avatar img {
        border-radius: 5%; /* Hace que la imagen sea redonda */
        box-shadow: 0 4px 8px rgba(0, 0, 0, 0.5); /* Agrega sombra a la imagen */
    }

    .user-box .user-info {
        font-size: 14px;
		text-align:left;
    }
	
	.user-info .nombre,
    .user-info .email,
    .user-info .pagina-web,
    .user-info .categoria {
        margin-bottom: 10px; /* Añade espacio entre elementos específicos dentro de .user-info */
    }
	
	/* Estilos para la sección de redes sociales */
    .redes-sociales {
        display: flex;
        justify-content: center; /* Alinea los elementos al centro */
        align-items: center;
        margin-top: 10px;
		float:left;
    }

    .redes-sociales div {
        margin-right: 10px;
    }

    .redes-sociales a {
        text-decoration: none;
        color: #333; /* Color del enlace */
        display: flex;
        align-items: center; /* Alinea los elementos verticalmente */
    }

    .redes-sociales i {
        font-size: 24px; /* Tamaño del icono */
        margin-right: 5px;
        color: #4286F3; /* Color del icono */
    }

    /* Estilos específicos para cada red social */
    .whatsapp i {
        color: #25D366; /* Color verde de WhatsApp */
    }

    .facebook i {
        color: #1877F2; /* Color azul de Facebook */
    }

    .instagram i {
        color: #E4405F; /* Color rosado de Instagram */
    }

    .linkedin i {
        color: #0077B5; /* Color azul de LinkedIn */
    }


    /* Estilos para pantallas pequeñas */
    @media only screen and (max-width: 600px) {
        .user-box {
            width: 100%; /* Mostrar una caja por fila en dispositivos móviles */
        }
    }
</style>';
}

add_action('wp_head', 'estilo_tabla_usuarios');