File size: 2,460 Bytes
ef78361
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
"""ν‚€μ›Œλ“œ 감성뢄석 νƒ­.

ν‚€μ›Œλ“œλ³„ 감성 μš”μ•½, λΈŒλžœλ“œxν‚€μ›Œλ“œ ꡐ차 뢄석, LLM 이유 νƒœκ·Έ.
νŒ¨ν‚€μ§€λ‘œ 뢄리 (overview, drilldown, detail, cross_analysis, export_kw).
"""
import streamlit as st

from .overview import render_keyword_overview, render_summary_table, render_sentiment_chart
from .drilldown import render_keyword_drilldown, render_competitor_summary, render_competitor_drilldown
from .cross_analysis import render_brand_keyword_cross


def render(data: dict):
    """ν‚€μ›Œλ“œ 뢄석 νƒ­ λ Œλ”λ§."""
    st.markdown("##### πŸ” ν‚€μ›Œλ“œ 감성 뢄석")
    st.caption("ν‚€μ›Œλ“œλ³„ AI λ‹΅λ³€ 감성 뢄포와 λΈŒλžœλ“œ μ–ΈκΈ‰ 뢄석")

    keyword_data = data.get("keyword_data", {})
    keywords_list = keyword_data.get("keywords", [])

    if not keywords_list:
        st.info("ν‚€μ›Œλ“œ 뢄석 데이터가 μ—†μŠ΅λ‹ˆλ‹€. μ‹€ν–‰μš”μ²­ νƒ­μ—μ„œ ν‚€μ›Œλ“œ 뢄석을 μ‹€ν–‰ν•΄μ£Όμ„Έμš”.")
        return

    # Brand type toggle
    brand_mode = st.radio(
        "뢄석 λŒ€μƒ",
        options=["🏠 μžμ‚¬ λΈŒλžœλ“œ", "🏒 κ²½μŸμ‚¬ λΈŒλžœλ“œ"],
        horizontal=True,
        key="sentiment:kw_brand_mode",
    )
    is_competitor = brand_mode == "🏒 κ²½μŸμ‚¬ λΈŒλžœλ“œ"

    if is_competitor:
        _render_competitor_view(data)
    else:
        _render_inhouse_view(data, keywords_list)


def _render_inhouse_view(data: dict, keywords_list: list[dict]):
    """μžμ‚¬ λΈŒλžœλ“œ ν‚€μ›Œλ“œ 뢄석."""
    # --- Overview Card ---
    render_keyword_overview(keywords_list)

    # --- Section 1: Summary Table ---
    render_summary_table(keywords_list)

    # --- Section 2: Sentiment Comparison Chart ---
    st.markdown("---")
    render_sentiment_chart(keywords_list)

    # --- Section 3: Keyword Drill-down (includes export) ---
    st.markdown("---")
    render_keyword_drilldown(data, keywords_list)

    # --- Section 4: Brand x Keyword Cross Analysis ---
    st.markdown("---")
    render_brand_keyword_cross(data)


def _render_competitor_view(data: dict):
    """κ²½μŸμ‚¬ ν‚€μ›Œλ“œ LLM 뢄석 κ²°κ³Ό."""
    st.markdown("##### 🏒 κ²½μŸμ‚¬ ν‚€μ›Œλ“œ LLM 뢄석")
    st.caption("κ²½μŸμ‚¬λ§Œ μ–ΈκΈ‰λœ λ¬Έμž₯에 λŒ€ν•œ LLM 감성 뢄석 κ²°κ³Ό")

    # Competitor summary card
    render_competitor_summary(data)

    # Cross analysis
    st.markdown("---")
    render_brand_keyword_cross(data, competitor=True)

    # Drill-down
    st.markdown("---")
    render_competitor_drilldown(data)