# -*- coding: utf-8 -*-
"""
题目相关模型

包含题目记录模型
"""

from .base import db, get_beijing_now
from .user import User


class ChallengeRecord(db.Model):
    """题目记录模型"""
    __tablename__ = 'challenge_records'

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(100), nullable=False)
    description = db.Column(db.Text)
    challenge_type = db.Column(db.String(20), default='web')  # 题目类型: web, pwn, crypto, reverse, misc
    user_id = db.Column(db.Integer, db.ForeignKey('users.id'))
    output_dir = db.Column(db.String(255))  # 输出目录路径
    estimated_time = db.Column(db.String(50))  # 预计解题时间
    log_file = db.Column(db.String(255))  # Augment 日志文件路径
    generation_status = db.Column(db.String(50), default='completed')  # 生成状态: completed, timeout_recovered, failed
    generation_warning = db.Column(db.Text)  # 生成警告信息（如AI超时但文件已生成）

    # 会话管理字段（用于继续对话功能）
    augment_workspace = db.Column(db.String(255))  # Augment 独立工作空间路径
    augment_session_dir = db.Column(db.String(255))  # Augment 会话目录路径
    augment_session_id = db.Column(db.String(100))  # Augment 会话ID（用于恢复特定会话）
    conversation_history = db.Column(db.Text)  # 对话历史摘要(JSON格式)
    can_continue = db.Column(db.Boolean, default=True)  # 是否可以继续对话

    # 部署相关字段
    deployable = db.Column(db.Boolean, default=None, nullable=True)  # 是否可部署（None=未检测, True=可部署, False=不可部署）

    created_at = db.Column(db.DateTime, default=get_beijing_now)
    updated_at = db.Column(db.DateTime, default=get_beijing_now, onupdate=get_beijing_now)

    # 关联
    author = db.relationship('User', backref=db.backref('challenges', lazy='dynamic'))

    def to_dict(self):
        """转换为字典"""
        return {
            'id': self.id,
            'name': self.name,
            'description': self.description,
            'challenge_type': self.challenge_type,
            'user_id': self.user_id,
            'output_dir': self.output_dir,
            'estimated_time': self.estimated_time,
            'log_file': self.log_file,
            'generation_status': self.generation_status,
            'generation_warning': self.generation_warning,
            'augment_workspace': self.augment_workspace,
            'augment_session_dir': self.augment_session_dir,
            'conversation_history': self.conversation_history,
            'can_continue': self.can_continue,
            'deployable': self.deployable,  # 是否可部署
            'created_at': self.created_at.isoformat() if self.created_at else None,
            'updated_at': self.updated_at.isoformat() if self.updated_at else None
        }

    @classmethod
    def from_dict(cls, data):
        """从字典创建记录"""
        challenge = cls(
            name=data.get('name', '未命名题目'),
            description=data.get('description', ''),
            challenge_type=data.get('challenge_type', 'web'),
            output_dir=data.get('output_dir', ''),
            estimated_time=data.get('estimated_time', ''),
            log_file=data.get('log_file', ''),
            user_id=data.get('user_id')
        )
        return challenge


