import pandas as pd
import streamlit as st
from config import DEFAULT_ICON
from shared_page import common_page_config
from data_storage import get_all_users, get_all_rosters
from domain.playoffs import CURRENT_PLAYOFF_WEEK, PLAYOFF_WEEK_TO_NAME
from load_options import get_map_week_player_id_option, PlayerOption, display_player
POSITION_LABELS = [
"QB-1",
"RB-1",
"RB-2",
"WR-1",
"WR-2",
"TE-1",
"K-1",
"DEF-1",
]
def display_user_names():
users_names = get_users_df()["name"]
st.markdown("
Users
", unsafe_allow_html=True)
st.dataframe(users_names, hide_index=True)
def get_users_df():
columns = ["user_id", "name"]
all_users = pd.DataFrame(get_all_users(columns_included=columns), columns=columns)
return all_users
@st.cache_data(ttl=60 * 60)
def load_masked_rosters() -> dict[int, dict[str, PlayerOption]]:
options_map = get_map_week_player_id_option()
roster_user_position_map: dict[int, dict[str, PlayerOption]] = {}
for user_id, position_id, player_id in get_all_rosters():
if user_id not in roster_user_position_map:
roster_user_position_map[user_id] = {}
week = int(position_id[0])
player = PlayerOption.empty_player(week=week)
if selected_player := options_map[week].get(player_id):
if selected_player.is_locked():
player = selected_player
else:
player = PlayerOption.hidden_player(week=week)
roster_user_position_map[user_id][position_id] = player
return roster_user_position_map
def display_user_row(week: int, user_name: str, user_map: dict[str, PlayerOption]):
selection_cols = st.columns(1 + len(POSITION_LABELS))
# first col is name
with selection_cols[0]:
st.write(user_name)
for pos_label, st_col in zip(POSITION_LABELS, selection_cols[1:]):
week_pos_label = f"{week}-{pos_label}"
with st_col:
player = user_map.get(week_pos_label, PlayerOption.empty_player(week=week))
display_player(player)
def display_roster_headers():
selection_cols = st.columns(1 + len(POSITION_LABELS))
with selection_cols[0]:
st.write("User Name")
for pos_label, st_col in zip(POSITION_LABELS, selection_cols[1:]):
with st_col:
st.write(pos_label.split("-")[0])
def display_masked_rosters(week: int):
rosters = load_masked_rosters()
users = get_users_df()
display_roster_headers()
for row in users.itertuples():
user_roster_map = rosters.get(row.user_id, {})
display_user_row(week, row.name, user_roster_map)
def display_rosters():
st.markdown("Rosters
", unsafe_allow_html=True)
options = list(PLAYOFF_WEEK_TO_NAME.keys())
default_selection = options.index(CURRENT_PLAYOFF_WEEK)
week_selected = st.selectbox(
"Week",
options=options,
index=default_selection,
key="roster_week_select",
format_func=lambda x: PLAYOFF_WEEK_TO_NAME[x],
)
display_masked_rosters(week_selected)
def get_page():
page_title = "Pool Scoreboard"
st.set_page_config(page_title=page_title, page_icon=DEFAULT_ICON, layout="wide")
common_page_config()
st.title(page_title)
display_user_names()
display_rosters()
if __name__ == "__main__":
get_page()