import pandas as pd
import streamlit as st

chapter_template = {
    "book_name": "AI 基础",
    "chapters": [
  {
    "id": 1,
    "name": "你好，人工智能！",
    "summary": "本章以生活化的案例引入人工智能，展示其在短视频推荐、图像识别、自动解题等日常场景中的应用。首先解释人工智能的定义、现实意义和发展历程，强调它在产业中的重要作用以及“以人为本、智能向善”的理念。通过“分类法”和“加权求和法”两种决策模型的思想实验，引导读者理解AI如何在多因素下进行选择与优化。随后介绍机器学习、深度学习与人工智能的关系，解释大模型的定义、特点和多格式生成能力，帮助读者建立对人工智能全貌的初步认知，并为后续章节奠定基础。",
    "keywords": ["人工智能定义", "发展历程", "分类法", "加权求和法", "机器学习", "深度学习", "大模型", "产业应用", "人工智能发展理念"]
  },
  {
    "id": 2,
    "name": "人工智能创作：生成式人工智能",
    "summary": "本章介绍生成式人工智能的概念及其在文本、图像、音频、视频等领域的多模态应用，阐述其与大语言模型的关系与区别。通过“抓阄”类比，揭示生成式AI的概率控制机制，引出提示词在引导生成结果中的关键作用。详细解析大语言模型的运行原理，包括学习语言模式、预测下一个词、依托大量数据训练及生成响应的过程。进一步介绍提示词工程的流程：明确需求、设计提示词、优化提示词和评估反馈，强调提示词设计对生成质量和风格控制的重要性，并提供实际应用思路。",
    "keywords": ["生成式人工智能", "多模态生成", "大语言模型", "提示词", "提示词工程", "生成控制参数", "内容创作"]
  },
  {
    "id": 3,
    "name": "人工智能自主行动力：智能体",
    "summary": "本章阐述智能体的定义、组成模块（感知、决策、行动、记忆、工具接口）及工作机制，分析其与大语言模型的区别。通过助手A与助手B的对比案例，说明智能体的自主性、目标导向、工具调用和多步推理能力。重点介绍提示词设计、工具调用、上下文与上下文工程在智能体中的作用，解释上下文的构成要素（提示词、用户输入、短期记忆、长期记忆、检索信息、可用工具定义、结构化模板等），并提出从“工具思维”向“伙伴协作思维”的转变，为构建任务驱动型、可扩展的智能系统奠定基础。",
    "keywords": ["智能体", "组成模块", "自主性", "工具调用", "多步推理", "提示词设计", "上下文工程"]
  },
  {
    "id": 4,
    "name": "人工智能的思考与行动：ReAct智能体实践",
    "summary": "本章聚焦ReAct（Reasoning + Acting）智能体架构，介绍其核心思想——推理与行动交替进行，构成反馈闭环。详细解析工作流程：输入 → 推理 → 行动 → 观察 → 再推理，通过持续迭代优化任务执行效果。通过智能助手案例，引导读者认识反馈机制在复杂任务中的价值。内容涵盖闭环实现方法、条件判断设计、多轮任务优化、循环结构与中间变量管理，以及结构化输出的生成。强调ReAct在动态环境中的适应性与可调试性，比较其与传统一次性提示方法的差异，并结合自动驾驶、工业机器人等应用实例展示其实用性。",
    "keywords": ["ReAct智能体", "推理与行动", "反馈闭环", "闭环流程", "多轮优化", "条件判断", "结构化输出"]
  },
  {
    "id": 5,
    "name": "人工智能的关键：学习",
    "summary": "本章系统讲解机器学习的核心概念和三大主要类型——监督学习、非监督学习、强化学习，并通过“猫抓老鼠”思想实验形象解释其原理与适用场景。内容包括特征与标签的定义、模型与算法的关系、建模流程（训练、测试、预测）及常用评估指标。介绍线性回归、逻辑回归、神经网络、决策树等典型模型，以及基线模型的作用与构建方法。强调根据任务选择合适的学习类型与模型的重要性，并探讨智能体在建模与代码生成中的辅助作用，帮助读者掌握从问题分析到模型评估的完整路径。",
    "keywords": ["机器学习", "监督学习", "非监督学习", "强化学习", "特征与标签", "建模流程", "模型评估", "基线模型"]
  },
  {
    "id": 6,
    "name": "人工智能的可靠之道：流程体系",
    "summary": "本章强调流程体系对人工智能项目成功的重要性，指出即使模型能力很强，若流程设计不当也会失败。通过推销策略类比，分析数据分布差异、特征缺失、过拟合等常见流程性问题。详细讲解机器学习项目的基本流程，包括数据划分比例、数据清洗、训练与测试、交叉验证，以及防止过拟合与数据泄露的策略。强调数据质量对模型性能的决定性作用，并介绍使用流程分析方法定位模型失败原因、通过提升算法等方式优化性能。旨在帮助读者建立规范、可复用的AI项目流程思维。",
    "keywords": ["流程体系", "机器学习流程", "数据划分", "数据清洗", "交叉验证", "过拟合", "数据泄露", "流程优化"]
  },
  {
    "id": 7,
    "name": "人工智能的眼睛：计算机视觉",
    "summary": "本章介绍了计算机视觉的基本概念、工作原理及在各领域的典型应用。内容涵盖图像的本质与特征提取、卷积神经网络（CNN）的结构与优势、迁移学习在视觉任务中的作用、多标签分类的原理与挑战，以及数据增强与模型优化的方法。通过案例分析工业缺陷检测与医疗影像分析，展示计算机视觉在实际场景中的价值。同时强调数据标注质量、类别不平衡和过拟合等问题对模型性能的影响，并配有在白菜人工智能平台上的动手实践任务。",
    "keywords": ["计算机视觉", "图像特征", "卷积神经网络", "迁移学习", "多标签分类", "数据增强", "工业检测", "医疗影像", "数据不平衡", "过拟合"]
  },
  {
    "id": 8,
    "name": "人工智能的口耳：语音与语言处理",
    "summary": "本章系统介绍了自然语言处理（NLP）与语音处理的核心概念与方法，包括语言模型的演变（统计语言模型与神经语言模型）、词嵌入与上下文理解、语音识别与合成的工作流程，以及情感分析与命名实体识别等应用。重点讲解BERT、GPT等预训练模型的基本原理与使用场景，并分析数据清洗、分词、向量化等预处理环节的重要性。结合白菜人工智能平台的实践，引导读者完成中文情感分类任务，并探讨模型在语义理解、方言处理与噪声环境下的挑战。",
    "keywords": ["自然语言处理", "语音识别", "语音合成", "统计语言模型", "神经语言模型", "词嵌入", "上下文理解", "情感分析", "命名实体识别", "BERT", "GPT"]
  },
  {
    "id": 9,
    "name": "人工智能+工业：让工厂更聪明",
    "summary": "本章介绍了人工智能在工业领域的典型应用，包括预测性维护、生产流程优化、质量检测与缺陷识别。讲解机器学习在工业数据分析中的流程，从数据采集、特征工程、模型选择到评估指标。重点展示了利用传感器数据预测设备故障、基于计算机视觉进行缺陷检测的案例，并探讨了工业AI面临的数据质量、实时性与可解释性等挑战。结合白菜人工智能平台，读者可完成“机器故障预测”和“罐盖缺陷检测”两项动手实践。",
    "keywords": ["工业人工智能", "预测性维护", "生产优化", "缺陷检测", "传感器数据", "特征工程", "模型评估", "数据质量", "实时性", "可解释性"]
  },
  {
    "id": 10,
    "name": "人工智能+农业：打造智慧农田",
    "summary": "本章探讨人工智能在农业领域的应用，包括农作物产量预测、病虫害识别、精准灌溉与施肥等。介绍了利用卫星与无人机影像、物联网传感器数据进行农情监测的技术方法，以及卷积神经网络、时间序列分析等模型在农业预测中的应用。通过案例分析智慧农田管理与农作物健康诊断，展示AI在提高产量、节约资源和降低风险方面的价值，并讨论数据采集难度、环境变化与模型泛化能力的挑战。",
    "keywords": ["农业人工智能", "产量预测", "病虫害识别", "精准农业", "卫星影像", "无人机监测", "物联网传感器", "农情监测", "时间序列分析", "模型泛化"]
  },
  {
    "id": 11,
    "name": "人工智能+医疗：辅助诊断与个性化健康",
    "summary": "本章介绍人工智能在医疗健康领域的应用，包括医学影像分析、疾病预测、个性化治疗与健康管理。重点讲解卷积神经网络在影像诊断中的作用、电子病历数据的挖掘方法、风险预测模型的构建与评估。通过案例展示AI在早期疾病筛查、药物推荐与慢病管理中的成效，并探讨隐私保护、数据安全、模型可解释性等医疗AI面临的核心问题。配合白菜人工智能平台的实践任务，引导读者训练和评估医疗数据分析模型。",
    "keywords": ["医疗人工智能", "医学影像分析", "疾病预测", "个性化治疗", "健康管理", "卷积神经网络", "电子病历", "风险预测", "隐私保护", "可解释性"]
  },
  {
    "id": 12,
    "name": "人工智能+商业：从数据到决策的个性化引擎",
    "summary": "本章聚焦人工智能在商业中的应用，重点介绍个性化推荐系统、用户评价情感分析、客户流失预测与用户画像、智能客服与动态定价等技术及其价值。通过讲解协同过滤、情感分类模型等核心算法，帮助读者理解如何利用用户行为数据优化产品与服务。深入分析数据质量、模型可解释性、隐私保护、信息茧房与算法操控等挑战，并结合白菜人工智能平台的实践，引导构建推荐与情感分析模型。",
    "keywords": ["商业人工智能", "个性化推荐", "协同过滤", "情感分析", "客户流失预测", "用户画像", "智能客服", "动态定价", "广告优化", "数据隐私", "信息茧房"]
  }
],
}

survey_result_template = {
    "summary": {
        "type": "低动机-低效能-被动型",
        "description": "学生在内在动机和学习行为上表现极低，自我效能感偏低，外在动机和学习压力中等，整体学习状态不佳。",
    },
    "dimension_scores": {
        "intrinsic_motivation": {"question_ids": [1, 2, 3, 4, 5], "mean_score": 0.8, "level": "极低", "label": "内在动机"},
        "extrinsic_motivation": {"question_ids": [6, 7, 8], "mean_score": 2.67, "level": "中等", "label": "外在动机"},
        "self_efficacy": {"question_ids": [9, 10, 11], "mean_score": 2, "level": "偏低", "label": "自我效能感"},
        "learning_behaviors": {"question_ids": [12, 13, 14, 15], "mean_score": 1.5, "level": "极低", "label": "学习行为"},
        "learning_stress_and_challenge": {"question_ids": [16, 17, 18], "mean_score": 2, "level": "中等", "label": "学习压力和挑战"},
    },
    "problems_identified": ["缺乏内在动机", "自我效能感不足", "学习行为被动", "学习压力适中但挑战感中等"],
    "personalized_recommendations": {
        "interest_motivation": ["提供多样化的学习材料以激发兴趣", "设计实践性强的项目以增加参与感"],
        "self_efficacy_building": ["设定并完成小目标以增强成就感", "提供正面反馈，强化学生的能力认知"],
        "learning_strategy": ["建议使用主动学习策略，如定期复习和提前预习", "鼓励参与课堂讨论和小组合作"],
        "teaching_support": ["定期与学生沟通，了解学习状态和困难", "提供额外的学习资源和支持材料"],
    },
}


def select_book_chapters(book_chapters: list[dict] = None):
    """
    Select a chapter from the book
    Args:
        book_chapters: List of book chapters
    Returns:
        Selected chapter
    """
    if book_chapters is None:
        book_chapters = chapter_template

    st.title(f"{book_chapters['book_name']}")

    # Convert chapters to DataFrame
    df = pd.DataFrame(book_chapters["chapters"])
    df["keywords"] = df["keywords"].apply(lambda x: ", ".join(x))

    # Display DataFrame with selection
    st.subheader("章节列表")
    event = st.dataframe(
        df[["id", "name", "summary"]],
        column_config={"id": "章节编号", "name": "章节名称", "summary": "章节摘要"},
        hide_index=True,
        use_container_width=True,
        key="chapter_selection",
        on_select="rerun",
        selection_mode="single-row",
    )

    # Display selected chapter details
    if event.selection.rows:
        selected_index = event.selection.rows[0]
        # Create a copy of the selected row to avoid the warning
        selected_chapter = df.iloc[selected_index].copy()
        st.success(f"您选择的学习章节是：第{selected_chapter['id']}章 - {selected_chapter['name']}")
        # Convert keywords back to list
        selected_chapter["keywords"] = selected_chapter["keywords"].split(", ")
        return selected_chapter.to_dict()

    # If no chapter is selected, return the first chapter
    st.success(f"默认选择: 第{book_chapters['chapters'][0]['id']}章 - {book_chapters['chapters'][0]['name']}")
    return book_chapters["chapters"][0]
