import streamlit as st
import uuid
import streamlit.components.v1 as components
import streamlit.components.v1 as stc
########################## PRUEBA 1  #########################
            # COMBINADO CON SEMANCTIC_INTERFACE_68OK APARECEN DOS BOX FLOTANTES
# Lista de estilos de sombra (puedes ajustar según tus preferencias)
'''
shadow_list = [
    "box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 12px;",
    "box-shadow: rgba(0, 0, 0, 0.15) 0px 5px 15px 0px;",
    "box-shadow: rgba(0, 0, 0, 0.05) 0px 6px 24px 0px, rgba(0, 0, 0, 0.08) 0px 0px 0px 1px;",
    "box-shadow: rgba(0, 0, 0, 0.16) 0px 10px 36px 0px, rgba(0, 0, 0, 0.06) 0px 0px 0px 1px;",
]
# Lista de estilos de transición
transition_list = [
    "transition: all 0.3s ease;",
    "transition: all 0.5s cubic-bezier(0.25, 0.8, 0.25, 1);",
    "transition: all 0.4s cubic-bezier(0.165, 0.84, 0.44, 1);",
]
def semantic_float_init():
    st.markdown("""
    
    """, unsafe_allow_html=True)
####################################################
def float_graph(content, width="40%", height="60%", position="bottom-right", shadow=0, transition=0):
    position_css = {
        "top-left": "top: 20px; left: 20px;",
        "top-right": "top: 20px; right: 20px;",
        "bottom-left": "bottom: 20px; left: 20px;",
        "bottom-right": "bottom: 20px; right: 20px;",
    }
    css = f"""
    width: {width};
    height: {height};
    position: fixed;
    z-index: 9999;
    background-color: white;
    border: 1px solid #ddd;
    padding: 10px;
    overflow: auto;
    {position_css.get(position, position_css['bottom-right'])}
    {shadow_list[shadow % len(shadow_list)]}
    {transition_list[transition % len(transition_list)]}
    """
    return float_box(content, css=css)
#########################################################
def float_box(content, css=""):
    box_id = f"semantic-float-{str(uuid.uuid4())[:8]}"
    st.markdown(f"""
    
        {content}
    
    """, unsafe_allow_html=True)
    return box_id
#########################################################
def toggle_float_visibility(box_id, visible):
    """
    Cambia la visibilidad de un contenedor flotante.
    :param box_id: ID del contenedor flotante
    :param visible: True para mostrar, False para ocultar
    """
    display = "block" if visible else "none"
    st.markdown(f"""
    
    """, unsafe_allow_html=True)
###########################################################
def update_float_content(box_id, new_content):
    """
    Actualiza el contenido de un contenedor flotante.
    :param box_id: ID del contenedor flotante
    :param new_content: Nuevo contenido HTML o Markdown
    """
    st.markdown(f"""
    
    """, unsafe_allow_html=True)
# Puedes agregar más funciones específicas para la interfaz semántica según sea necesario
'''
################################################# version backup #########################
            # COMBINADO CON SEMANCTIC_INTERFACE_68OK APARECEN SOLO UN CUADRO A LA DERECJHA Y AL CENTRO
 # Lista de estilos de sombra (puedes ajustar según tus preferencias)
shadow_list = [
    "box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 12px;",
    "box-shadow: rgba(0, 0, 0, 0.15) 0px 5px 15px 0px;",
    "box-shadow: rgba(0, 0, 0, 0.05) 0px 6px 24px 0px, rgba(0, 0, 0, 0.08) 0px 0px 0px 1px;",
    "box-shadow: rgba(0, 0, 0, 0.16) 0px 10px 36px 0px, rgba(0, 0, 0, 0.06) 0px 0px 0px 1px;",
]
# Lista de estilos de transición
transition_list = [
    "transition: all 0.3s ease;",
    "transition: all 0.5s cubic-bezier(0.25, 0.8, 0.25, 1);",
    "transition: all 0.4s cubic-bezier(0.165, 0.84, 0.44, 1);",
]
def semantic_float_init():
    """Inicializa los estilos necesarios para los elementos flotantes en la interfaz semántica."""
    st.markdown("""
    
    """, unsafe_allow_html=True)
def float_graph(content, width="40%", height="60%", position="bottom-right", shadow=0, transition=0):
    """
    Crea un contenedor flotante para el gráfico de visualización semántica.
    :param content: Contenido HTML o Markdown para el gráfico
    :param width: Ancho del contenedor
    :param height: Altura del contenedor
    :param position: Posición del contenedor ('top-left', 'top-right', 'bottom-left', 'bottom-right')
    :param shadow: Índice del estilo de sombra a utilizar
    :param transition: Índice del estilo de transición a utilizar
    """
    position_css = {
        "top-left": "top: 20px; left: 20px;",
        "top-right": "top: 20px; right: 20px;",
        "bottom-left": "bottom: 20px; left: 20px;",
        "bottom-right": "bottom: 20px; right: 20px;",
    }
    css = f"""
    width: {width};
    height: {height};
    {position_css.get(position, position_css['bottom-right'])}
    {shadow_list[shadow % len(shadow_list)]}
    {transition_list[transition % len(transition_list)]}
    """
    return float_box(content, css=css)
def float_box(content, css=""):
    """
    Crea un contenedor flotante genérico.
    :param content: Contenido HTML o Markdown para el contenedor
    :param css: Estilos CSS adicionales
    """
    box_id = f"semantic-float-{str(uuid.uuid4())[:8]}"
    st.markdown(f"""
    
    """, unsafe_allow_html=True)
    return box_id
def toggle_float_visibility(box_id, visible):
    """
    Cambia la visibilidad de un contenedor flotante.
    :param box_id: ID del contenedor flotante
    :param visible: True para mostrar, False para ocultar
    """
    display = "block" if visible else "none"
    st.markdown(f"""
    
    """, unsafe_allow_html=True)
def update_float_content(box_id, new_content):
    """
    Actualiza el contenido de un contenedor flotante.
    :param box_id: ID del contenedor flotante
    :param new_content: Nuevo contenido HTML o Markdown
    """
    st.markdown(f"""
    
    """, unsafe_allow_html=True)
# Puedes agregar más funciones específicas para la interfaz semántica según sea necesario
#################FIN BLOQUE DEL BACK UP#################################################
'''
############ TEST  #########################################
def semantic_float_init():
    st.markdown("""
    
    """, unsafe_allow_html=True)
def float_graph(content, width="40%", height="60%", position="center-right", shadow=0, transition=0):
    position_css = {
        "top-left": "top: 20px; left: 20px;",
        "top-right": "top: 20px; right: 20px;",
        "bottom-left": "bottom: 20px; left: 20px;",
        "bottom-right": "bottom: 20px; right: 20px;",
        "center-right": "top: 50%; right: 20px; transform: translateY(-50%);"
    }
    css = f"""
    position: fixed;
    width: {width};
    height: {height};
    {position_css.get(position, position_css['center-right'])}
    {shadow_list[shadow % len(shadow_list)]}
    {transition_list[transition % len(transition_list)]}
    z-index: 9999;
    display: block !important;
    background-color: white;
    border: 1px solid #ddd;
    border-radius: 5px;
    padding: 10px;
    overflow: auto;
    """
    box_id = f"semantic-float-{str(uuid.uuid4())[:8]}"
    html_content = f"""
    
        {content}
    
    
    """
    components.html(html_content, height=600, scrolling=True)
    return box_id
def toggle_float_visibility(box_id, visible):
    display = "block" if visible else "none"
    components.html(f"""
    
    """, height=0)
def update_float_content(box_id, new_content):
    components.html(f"""
    
    """, height=0)
############BackUp #########################################
# Lista de estilos de sombra y transición (sin cambios)
shadow_list = [
    "box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 12px;",
    "box-shadow: rgba(0, 0, 0, 0.15) 0px 5px 15px 0px;",
    "box-shadow: rgba(0, 0, 0, 0.05) 0px 6px 24px 0px, rgba(0, 0, 0, 0.08) 0px 0px 0px 1px;",
    "box-shadow: rgba(0, 0, 0, 0.16) 0px 10px 36px 0px, rgba(0, 0, 0, 0.06) 0px 0px 0px 1px;",
]
transition_list = [
    "transition: all 0.3s ease;",
    "transition: all 0.5s cubic-bezier(0.25, 0.8, 0.25, 1);",
    "transition: all 0.4s cubic-bezier(0.165, 0.84, 0.44, 1);",
]
def semantic_float_init():
    st.markdown("""
    
    """, unsafe_allow_html=True)
def float_graph(content, width="40%", height="60%", position="bottom-right", shadow=0, transition=0):
    position_css = {
        "top-left": "top: 20px; left: 20px;",
        "top-right": "top: 20px; right: 20px;",
        "bottom-left": "bottom: 20px; left: 20px;",
        "bottom-right": "bottom: 20px; right: 20px;",
        "center-right": "top: 50%; right: 20px; transform: translateY(-50%);"
    }
    css = f"""
    width: {width};
    height: {height};
    {position_css.get(position, position_css['bottom-right'])}
    {shadow_list[shadow % len(shadow_list)]}
    {transition_list[transition % len(transition_list)]}
    """
    return float_box(content, css=css)
def float_box(content, css=""):
    box_id = f"semantic-float-{str(uuid.uuid4())[:8]}"
    components.html(f"""
    
    
    """, height=0)
    return box_id
def toggle_float_visibility(box_id, visible):
    display = "block" if visible else "none"
    components.html(f"""
    
    """, height=0)
def update_float_content(box_id, new_content):
    components.html(f"""
    
    """, height=0)
'''