import streamlit as st
import pandas as pd
import plotly.express as px

# CSV 파일을 업로드하고 데이터를 로드하는 함수
def load_data():
    uploaded_file = st.file_uploader("CSV 파일을 업로드하세요", type=["csv"])
    if uploaded_file is not None:
        df = pd.read_csv(uploaded_file)
        return df
    return None

# 업로드된 데이터가 있다면 필터링하는 함수
def filter_data(df):
    keyword = st.text_input("키워드로 뉴스 필터링")
    if keyword:
        filtered_df = df[df.apply(lambda row: row.astype(str).str.contains(keyword, case=False).any(), axis=1)]
        st.write(f"'{keyword}'에 대한 필터링 결과")
        st.dataframe(filtered_df)
        return filtered_df
    return df

# 뉴스 제목 길이에 대한 히스토그램을 생성하는 함수
def plot_histogram(df):
    df['title_length'] = df['Title'].apply(len)
    fig = px.histogram(df, x='title_length', title='뉴스 제목 길이 히스토그램')
    st.plotly_chart(fig)

# 선택된 뉴스의 상세 정보를 보여주는 함수
def show_news_details(df):
    if not df.empty:
        selected_index = st.selectbox("뉴스를 선택하세요", df.index)
        selected_news = df.loc[selected_index]
        st.write("선택된 뉴스 상세 정보")
        st.write(f"**제목:** {selected_news['Title']}")
        st.write(f"**URL:** {selected_news['URL']}")

# 메인 함수: 데이터 로딩, 필터링, 시각화 및 뉴스 상세 정보 표시
def main():
    try:
        data = load_data()
        if data is not None:
            st.write("업로드된 뉴스 데이터")
            st.dataframe(data)
            
            filtered_data = filter_data(data)
            if filtered_data is not None:
                plot_histogram(filtered_data)
                show_news_details(filtered_data)
    except Exception as e:
        st.error(f"오류가 발생했습니다: {e}")

if __name__ == "__main__":
    main()
