#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
模块名称：performance_output.py
模块描述：性能测试任务输出数据库模型 — 存储从响应体捕获的字段值

作者：czj
创建日期：2026-08-13
"""

from datetime import datetime
from typing import Optional
from sqlalchemy import String, Integer, JSON, DateTime, UniqueConstraint
from sqlalchemy.orm import Mapped, mapped_column

from app.database import Base


class PerformanceTaskOutput(Base):
    """
    性能测试任务输出

    记录性能测试执行过程中从响应体捕获的字段值，
    供其他任务引用（如创建会议后捕获 messageId，用于取消会议）。

    Attributes:
        id (int): 自增主键
        task_id (str): 关联任务 ID
        key (str): 输出键名（如 "message_ids"）
        value (list): 输出值列表（JSON 数组）
        created_at (datetime): 创建时间
    """

    __tablename__ = "performance_task_outputs"
    __table_args__ = (
        UniqueConstraint("task_id", "key", name="uq_task_output_key"),
    )

    id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True, comment="自增主键")
    task_id: Mapped[str] = mapped_column(String(64), index=True, comment="关联任务ID")
    key: Mapped[str] = mapped_column(String(100), comment="输出键名")
    value: Mapped[list] = mapped_column(JSON, default=list, comment="输出值列表（JSON数组）")
    created_at: Mapped[datetime] = mapped_column(
        DateTime, default=datetime.utcnow, comment="创建时间"
    )

    def __repr__(self) -> str:
        return f"<PerformanceTaskOutput(id={self.id}, task_id={self.task_id}, key={self.key})>"

    def to_dict(self) -> dict:
        return {
            "id": self.id,
            "task_id": self.task_id,
            "key": self.key,
            "value": self.value or [],
            "created_at": self.created_at.isoformat() if self.created_at else None,
        }