import streamlit as st
from resumen import render_resumen, load_data, get_periods, FILE_PATH
from benchmark import benchmark_page
from Oferta import oferta_page 



def main():
    st.set_page_config(
        page_title="REM-Mazatlán",
        layout="wide",
    )

    # Cargamos UNA sola vez los datos
    ventas, precios = load_data(FILE_PATH)
    last_period, prev_period, periods = get_periods(ventas)

    # ==========================
    # 1) FILTROS GLOBALES
    # ==========================
    st.sidebar.header("Filtros")

    # --- Periodo base ---
    periodo_sel = st.sidebar.selectbox(
        "Periodo base",
        options=periods,
        index=len(periods) - 1,
        format_func=lambda x: x.strftime("%Y-%m-%d"),
    )

    idx = list(periods).index(periodo_sel)
    periodo_prev_sel = periods[idx - 1] if idx > 0 else None

    # --- Catálogo de proyectos por tipo ---
    catalogo = (
        ventas[["Nombre_desarrollo", "Tipo_proyecto"]]
        .dropna(subset=["Nombre_desarrollo", "Tipo_proyecto"])
        .drop_duplicates()
    )

    tipo_to_projects = {
        tipo: sorted(
            catalogo.loc[catalogo["Tipo_proyecto"] == tipo, "Nombre_desarrollo"].unique()
        )
        for tipo in ["Vertical", "Horizontal", "Lote"]
    }

    st.sidebar.markdown("**Proyectos por tipo**")
    st.sidebar.caption("Por defecto se incluyen todos. Usa estos filtros solo para excluir proyectos específicos.")

    # --- Vertical ---
    excluir_vertical = st.sidebar.multiselect(
        "Excluir proyectos Vertical (opcional)",
        options=tipo_to_projects["Vertical"],
        default=[],
        placeholder="Escribe para buscar un proyecto vertical...",
    )
    proyectos_vertical = [
        p for p in tipo_to_projects["Vertical"] if p not in excluir_vertical
    ]

    # --- Horizontal ---
    excluir_horizontal = st.sidebar.multiselect(
        "Excluir proyectos Horizontal (opcional)",
        options=tipo_to_projects["Horizontal"],
        default=[],
        placeholder="Escribe para buscar un proyecto horizontal...",
    )
    proyectos_horizontal = [
        p for p in tipo_to_projects["Horizontal"] if p not in excluir_horizontal
    ]

    # --- Lote ---
    excluir_lote = st.sidebar.multiselect(
        "Excluir proyectos Lote (opcional)",
        options=tipo_to_projects["Lote"],
        default=[],
        placeholder="Escribe para buscar un proyecto de lotes...",
    )
    proyectos_lote = [
        p for p in tipo_to_projects["Lote"] if p not in excluir_lote
    ]

    # Proyectos realmente seleccionados (incluidos en el análisis)
    proyectos_seleccionados = (
        list(proyectos_vertical) + list(proyectos_horizontal) + list(proyectos_lote)
    )

    # Tipos que siguen teniendo al menos un proyecto
    tipo_filter = []
    if proyectos_vertical:
        tipo_filter.append("Vertical")
    if proyectos_horizontal:
        tipo_filter.append("Horizontal")
    if proyectos_lote:
        tipo_filter.append("Lote")

    if not proyectos_seleccionados:
        st.sidebar.warning("Selecciona al menos un proyecto (no excluyas todos).")
        st.stop()


    # Proyectos realmente seleccionados (todos los tipos)
    proyectos_seleccionados = (
        list(proyectos_vertical) + list(proyectos_horizontal) + list(proyectos_lote)
    )

    # Tipo_filter = solo tipos que tienen algún proyecto seleccionado
    tipo_filter = []
    if proyectos_vertical:
        tipo_filter.append("Vertical")
    if proyectos_horizontal:
        tipo_filter.append("Horizontal")
    if proyectos_lote:
        tipo_filter.append("Lote")

    if not proyectos_seleccionados:
        st.sidebar.warning("Selecciona al menos un proyecto en alguna categoría.")
        st.stop()

    st.sidebar.info(
        "Estos filtros se aplican a todas las secciones del dashboard."
    )

    st.sidebar.markdown("---")

    # ==========================
    # 2) NAVEGACIÓN
    # ==========================
    st.sidebar.header("Navegación")
    pagina = st.sidebar.radio(
        "Selecciona una sección:",
        ["Resumen", "Oferta","Benchmark"],   # luego agregamos más secciones aquí
    )

    # ==========================
    # 3) CONTENIDO
    # ==========================
    if pagina == "Resumen":
        render_resumen(
            ventas=ventas,
            precios=precios,
            periodo_sel=periodo_sel,
            periodo_prev=periodo_prev_sel,
            tipo_filter=tipo_filter,
            proyectos_seleccionados=proyectos_seleccionados,
        )
    elif pagina == "Oferta":
        oferta_page(
            ventas=ventas,
            precios=precios,
            periodo_sel=periodo_sel,
            periodo_prev=periodo_prev_sel,
            tipo_filter=tipo_filter,
            proyectos_seleccionados=proyectos_seleccionados,
        )

    elif pagina == "Benchmark":
        benchmark_page()


if __name__ == "__main__":
    main()
