from matplotlib import rcParams, pyplot as plt
from sqlalchemy import func
from orm import db_session, Sample

# 创建全局绘图对象和轴
fig, ax = plt.subplots(figsize=(8, 5))
plt.ion()  # 启用交互模式

def visualize_progress():
    """
    可视化 `is_done_flag` 的分布,动态更新进度条。
    """

    # 设置全局字体
    rcParams['font.family'] = 'SimHei'  # 黑体,适用于中文
    rcParams['font.size'] = 12

    # 查询数据库中各 is_done_flag 的数量
    result = db_session.query(
        Sample.is_done_flag, func.count(Sample.id)
    ).group_by(Sample.is_done_flag).all()

    # 转换为字典
    data = {flag: count for flag, count in result}

    # 填充缺失的标志为 0
    for flag in [-1, 0, 1]:
        data.setdefault(flag, 0)

    # 准备数据
    labels = ['未完成 (-1)', '计算中(0)', '完成 (1)']
    values = [data[-1], data[0], data[1]]

    # 清空之前的绘图内容
    ax.clear()

    # 创建柱状图
    ax.bar(labels, values, color=['red', 'orange', 'green'])
    ax.set_title('任务进度分布', fontsize=16)
    ax.set_xlabel('任务状态', fontsize=14)
    ax.set_ylabel('数量', fontsize=14)
    ax.tick_params(axis='both', labelsize=12)

    # 显示具体数量
    for i, v in enumerate(values):
        ax.text(i, v + 0.5, str(v), ha='center', fontsize=12)

    # 刷新绘图
    plt.pause(1)  # 暂停一段时间以更新图表

# 关闭窗口时,停止交互模式
# plt.ioff()