o
    adR                     @   s`   d dl mZ d dlZd dlZd dlmZ d dlm	Z	 d dl
T dd Zdd Zd	d
 Zdd ZdS )    N)html)dcc)*c                 C   s:   | dkrt }n	| dkrt}nt}dd |d  D }|S )uj  
    Actualiza las opciones del menú desplegable de los estados en función de la pestaña seleccionada.
    Args:
        tab (str): Pestaña seleccionada en la aplicación Dash.
    Returns:
        list: Listado de opciones para el menú desplegable de los estados.
        Cada opción es un diccionario con una etiqueta ("label") y un valor ("value").
    tab-1tab-2c                 S   s   g | ]}||d qS ))labelvalue ).0entidadr	   r	   6/var/www/html/visualizacion-main/function_callbacks.py
<listcomp>   s    z+update_dropdown_options.<locals>.<listcomp>#Entidad Federativa donde se imparte)df_lic	df_masterdf_docunique)tabdfentidad_optionsr	   r	   r   update_dropdown_options	   s   	
r   c                 C   sp  d}| dkrBt }dt d< tj||d |jdddd	d
|d dgd}|j|g d |d |jtddddddtdddddd n{| dkrt}dtd< tj||d |jdddd	d
td dgd}|j|g d |d |jtddddddtdddddd n;t}dtd< tj||d |jdddd	d
dgtd d}|j|g d |d |jtddddddtdddddd i ddd d!d"d!d#d!d$d!d%d!d&dd'd!d(d)d*d!d+d)d,d!d-d.d/d!d0dd1d!d2dd)d)d!d)dd)d)d!d3d)d4d.d3d)d)d5}|d6ur|||d7 |k }t	|dkrR|
|d!}|jdd8gdd8gd9t|d  |d:  d
|d;dd< |jt|d  t|d:  d
d= |S |jdd	d
d= |jd>d? |jd>d;tdd	d
d@ |jdd	d
d>d;dAdB |S |jdd	d
d= |jd>d? |jd>d;tdd	d
d@ |jdd	d
d>d;dAdB |jtg dCdDdDtddddddE |S )FuZ  
    Genera una figura interactiva de dispersión en un mapa según la pestaña y estado seleccionados.
    Args:
        tab (str): Pestaña seleccionada en la aplicación Dash.
        estado (str): Estado seleccionado en el menú desplegable.
    Returns:
        plotly.graph_objects.Figure: Figura interactiva de dispersión en un mapa.
    u  
    <b>Institución/Universidad:</b> %{customdata[0]}<br>
    <b>Nombre del programa:</b> %{customdata[1]}<br>
    <b>¿Pertenece al PNPC?:</b> %{customdata[2]}<br>
    <b>Dirección física:</b> %{customdata[3]}<br>
    <b>Correo:</b> %{customdata[4]}<br>
    <b>Sede:</b> %{customdata[5]}<br>
    <b>Página web del programa:</b> <a href="%{customdata[6]}" target="_blank" style="color:white; font-weight:bold;">%{customdata[6]}</a><br>
    r   
   sizelatg@i  gOn7@gN@aY)r   lon#00667C)r   r   zoomheightcenterr   color_discrete_sequence)   Institución/Universidadz#Nombre de la Carrera (Licenciatura)   ¿Pertenece al PNPC?u!   Dirección física (Licenciatura)CorreozSede (Licenciatura)u5   Página web del programa de Licenciatura (si hubiera))
customdatahovertemplatezrgba( 36, 36, 36, 0.65)   Ralewaywhitezrgba( 36, 36, 36, 0.65 ))bgcolor	font_sizefont_family
font_colorbordercolorr   lrtb)
hoverlabelmarginr   #E85D7E)r    u   Nombre del Programa (Maestría)    ¿Pertenece al PNPC? (Maestría)u   Dirección física (Maestría)r"   u   Sede (Maestría)u2   Página web del programa de Maestría (si hubiera)#7D5CB8)r   r   r   r   r   r   r   )r    z Nombre del programa de Doctorado    ¿Pertenece al PNPC? (Doctorado)u   Dirección física (Doctorado)r"   zSede (Doctorado)u2   Página web del programa de Doctorado (si hubiera)Aguascalientes   zBaja California   zBaja California SurCampecheChiapas	Chihuahuau   Ciudad de MéxicoCoahuilaColima	   Durango
GuanajuatoGuerreroHidalgo   Jaliscou   Estado de Méxicou
   MichoacánMorelosg      @g      @)Nayaritu   Nuevo LeónOaxacaPueblau
   QuerétarozQuintana Roou   San Luis PotosíSinaloaSonoraTabasco
TamaulipasTlaxcalaVeracruzu   Yucatán	ZacatecasNr      )xyr   zopen-street-map)domainr   r   stylebearing)mapbox_centerg@)mapbox_zoom)r   rV   r   )r   r   rV   )mapbox)layerszrgba(0,0,0,0))rZ   plot_bgcolorpaper_bgcolorr3   )r   pxscatter_mapboxr   update_tracesupdate_layoutdictr   r   lengetupdate_mapboxesmeanfloat)r   estadohover_templater   figzoom_levels	df_estado
zoom_levelr	   r	   r   render_content   sl  				

#
2
#
rn   c           
      C   s  g }|dkr| dkr0t t}t ttd dk }ttd td  k d jd }td  }n_| dkr]t t}t ttd	 d
dg }ttd td  k d jd }td  }n2| dkrt t}t ttd d
k }t	t	d t	d  k d jd }t	d  }nd}d}d}d}|
ttjtdttjdddtjd| ddggddtjtdttjdddtjd| ddggdd|
tjtdttjd| ddtjdddtjd| ddggddg |dkr| dkrttd |k }n| dkrttd |k }n| dkr(ttd |k }d|jv rt ||d dk }t ||d dk }	|
tjtd| dttjdd dtjd| ddggdd |
tjtd| dttjd!ddtjd|	 ddggdd d	|jv sd|jv rd|jv rt ||d dd
g }nd	|jv rt ||d	 dd
g }nd}|
tjtd| dttjd"ddtjd| ddggdd |S )#u   
    Esta función se encarga de actualizar las estadísticas de la entidad federativa seleccionada
    y las coloca en las tarjetas correspondientes.
    vacior   r!   z	No aplica
Frecuencia   Árear   r   r5   Siu   Síztab-3r7   Por nivel educativozTotal de Programas:z
card-title	className	z	card-text!card border-secondary mb-3 shadowzTotal de Programas PNPC:card border-secondary mb-3u   Área de interés mayorzFrecuencia:r   u(   ¿La Institución es pública o privada?u   PúblicaPrivadazPara el estado de :u!   Total de Instituciones Públicas:cz Total de Instituciones Privadas:z.Total de Instituciones pertenecientes al PNPC:)rc   r   conteo_areas_licmaxilocr   isinconteo_areas_masterr   conteo_areas_docappenddbcColCard
CardHeaderCardBodyr   H4H5columns)
r   rh   cardstotal_programs
total_pnpcmax_areamax_area_freqrl   total_publicastotal_privadasr	   r	   r   update_stats   sT  



5


r   c                 C   s  g }d}t jtddddddg dd}|jddtd	d
tdddddtdddtdddddddd
 tj|d}|t	tj
tdt|gddg t jtg ddg dd}|t	tj
tdttj|dgddg |jtdddddtddddd t jtddd d!g d"d#dd$d%d&}|jddtd	d
tdddddtdddtdddd'd(dd)d*d+d,d- |tt	tj
td.ttj|dgddgg |S )/u   
    Esta función se encarga de actualizar las estadísticas generales del dataframe
    y generar gráficos de algunos totales.
    r   Tipo de ProgramaTotalzTotal de Programas)r   r   )r   r4   r6   )rS   rT   colorlabelsr   z#242424T)remover-   r%   r'   )r   r   2   pixels(   v)
r\   r]   modebarr3   legend_fontfontlegend_entrywidthlegend_entrywidthmodelegend_itemwidthlegend_orientation)figurers   rx   rt   )zNivel educativor   r    )pathvaluesr   u1   Gráfico de Sunburst por Nivel Educativo y Estadorw      )r3   r   grid_columnsNivelrp   rq   group)r   rq   rp   u    Frecuencia de áreas de interészNivel de estudio)rp   r   )rS   rT   r   barmode
hover_datatitler   i,  trace   hleftmiddle)r\   r]   r   r3   r   r   r   legend_itemsizingr   r   r   legend_title_sidelegend_valignu2   Gráfico de Áreas de Interés por Nivel Educativo)r^   bar	df_totalsra   rb   r   Graphr   r   r   r   r   r   sunburstdf_combined	df_conteoRow)r   r   r   rj   graphfig_sunburst	fig_areasr	   r	   r   update_general_stats  s   r   )plotly.expressexpressr^   pandaspddash_bootstrap_componentsr   dashr   r   datar   rn   r   r   r	   r	   r	   r   <module>   s     6 0