import streamlit as st import datetime from utils import ( download_ephe_files, get_location_data, calculate_julian_day, get_planet_positions, calculate_houses ) from chart_generator import create_wheel_chart, PLANET_NAMES # Zodiac sign symbols and names ZODIAC_SYMBOLS = { "Aries": "♈", "Taurus": "♉", "Gemini": "♊", "Cancer": "♋", "Leo": "♌", "Virgo": "♍", "Libra": "♎", "Scorpio": "♏", "Sagittarius": "♐", "Capricorn": "♑", "Aquarius": "♒", "Pisces": "♓" } def calcular_signo(longitude): signo = "" if 0 <= longitude < 30: signo = "Aries" elif 30 <= longitude < 60: signo = "Taurus" elif 60 <= longitude < 90: signo = "Gemini" elif 90 <= longitude < 120: signo = "Cancer" elif 120 <= longitude < 150: signo = "Leo" elif 150 <= longitude < 180: signo = "Virgo" elif 180 <= longitude < 210: signo = "Libra" elif 210 <= longitude < 240: signo = "Scorpio" elif 240 <= longitude < 270: signo = "Sagittarius" elif 270 <= longitude < 300: signo = "Capricorn" elif 300 <= longitude < 330: signo = "Aquarius" elif 330 <= longitude < 360: signo = "Pisces" return signo # Configuração da página st.set_page_config( page_title="Visualizador de Mapa Astral", page_icon="🌟", layout="centered" ) # Carregar CSS personalizado with open("styles/custom.css") as f: st.markdown(f"", unsafe_allow_html=True) # Inicializar arquivos de efemérides if not download_ephe_files(): st.error("Falha ao inicializar dados astronômicos. Por favor, tente novamente.") st.stop() # Título e descrição st.markdown("""

✨ Visualizador de Mapa Astral ✨

""", unsafe_allow_html=True) st.markdown("""

Descubra seu mapa astral através deste visualizador interativo.
Insira seus dados de nascimento abaixo para revelar as posições celestiais no momento do seu nascimento.

""", unsafe_allow_html=True) # Formulário de entrada st.markdown("
", unsafe_allow_html=True) if st.viewport_width < 768: # Layout em uma coluna para dispositivos móveis birth_date = st.date_input( "Data de Nascimento", min_value=datetime.date(1900, 1, 1), max_value=datetime.date.today(), help="Selecione sua data de nascimento" ) birth_time = st.time_input( "Hora de Nascimento", help="Insira o horário mais preciso possível" ) birth_place = st.text_input( "Local de Nascimento", placeholder="Ex: São Paulo, Brasil", help="Digite a cidade e país de nascimento" ) else: # Layout em três colunas para desktop col1, col2, col3 = st.columns(3) with col1: birth_date = st.date_input( "Data de Nascimento", min_value=datetime.date(1900, 1, 1), max_value=datetime.date.today(), help="Selecione sua data de nascimento" ) with col2: birth_time = st.time_input( "Hora de Nascimento", help="Insira o horário mais preciso possível" ) with col3: birth_place = st.text_input( "Local de Nascimento", placeholder="Ex: São Paulo, Brasil", help="Digite a cidade e país de nascimento" ) if st.button("✨ Gerar Mapa Astral ✨", key="generate"): try: with st.spinner("🌟 Calculando posições celestiais..."): location_data = get_location_data(birth_place) jd = calculate_julian_day(birth_date, birth_time, location_data['timezone']) planet_positions = get_planet_positions(jd) houses = calculate_houses( jd, location_data['latitude'], location_data['longitude'] ) # Calcular signo solar signo_solar = calcular_signo(planet_positions['Sun']['longitude']) simbolo_solar = ZODIAC_SYMBOLS[signo_solar] st.markdown("

Seu Mapa Astral

", unsafe_allow_html=True) # Ajuste do layout responsivo para o resultado if st.viewport_width < 768: # Layout em uma coluna para mobile st.markdown(f"""
{simbolo_solar}

{signo_solar}

{planet_positions['Sun']['longitude']:.2f}°

""", unsafe_allow_html=True) st.markdown("
", unsafe_allow_html=True) fig = create_wheel_chart(planet_positions, houses) st.plotly_chart(fig, use_container_width=True) st.markdown("
", unsafe_allow_html=True) st.markdown("
", unsafe_allow_html=True) st.markdown("

🌍 Posições Planetárias

", unsafe_allow_html=True) for planet, data in planet_positions.items(): planet_name = PLANET_NAMES.get(planet, planet) # Usar nome traduzido st.write(f"✨ {planet_name}: {data['longitude']:.2f}°") st.markdown("

🏠 Cúspides das Casas

", unsafe_allow_html=True) for i, cusp in enumerate(houses['cusps'], 1): st.write(f"Casa {i}: {cusp:.2f}°") st.markdown("
", unsafe_allow_html=True) st.markdown("
", unsafe_allow_html=True) st.markdown("

🌟 Pontos Importantes

", unsafe_allow_html=True) st.write(f"⭐ Ascendente: {houses['ascendant']:.2f}°") st.write(f"🌠 Meio do Céu: {houses['mc']:.2f}°") st.markdown("
", unsafe_allow_html=True) else: # Layout em duas colunas para desktop chart_col, info_col = st.columns([2, 1]) with chart_col: st.markdown("
", unsafe_allow_html=True) fig = create_wheel_chart(planet_positions, houses) st.plotly_chart(fig, use_container_width=True) st.markdown("
", unsafe_allow_html=True) with info_col: st.markdown("
", unsafe_allow_html=True) st.markdown("

🌍 Posições Planetárias

", unsafe_allow_html=True) for planet, data in planet_positions.items(): planet_name = PLANET_NAMES.get(planet, planet) # Usar nome traduzido st.write(f"✨ {planet_name}: {data['longitude']:.2f}°") st.markdown("

🏠 Cúspides das Casas

", unsafe_allow_html=True) for i, cusp in enumerate(houses['cusps'], 1): st.write(f"Casa {i}: {cusp:.2f}°") st.markdown("
", unsafe_allow_html=True) st.markdown("
", unsafe_allow_html=True) st.markdown("

🌟 Pontos Importantes

", unsafe_allow_html=True) st.write(f"⭐ Ascendente: {houses['ascendant']:.2f}°") st.write(f"🌠 Meio do Céu: {houses['mc']:.2f}°") st.markdown("
", unsafe_allow_html=True) except Exception as e: st.error(f"Ocorreu um erro: {str(e)}") # Rodapé st.markdown("""

Feito com ✨ e energia cósmica

""", unsafe_allow_html=True)