"""遗留任务记录表模型"""

import datetime
from typing import Optional

import sqlalchemy as sa
from sqlalchemy import func
from sqlalchemy.orm import Mapped, mapped_column

from backend.core.database import Base

# 任务状态
LEFT_OVER_TASK_STATUS_VALUES = ("open", "closed")


class LeftoverTask(Base):
    """遗留任务记录表

    记录通过 PR 评论创建的遗留任务,与 GitCode Issue 一一对应。
    """
    __tablename__ = "leftover_tasks"

    id: Mapped[int] = mapped_column(sa.Integer, primary_key=True, autoincrement=True)

    # 关联 PR
    pr_id: Mapped[int] = mapped_column(sa.Integer, nullable=False)

    # GitCode Issue 信息
    issue_id: Mapped[str] = mapped_column(sa.String(32), nullable=False)
    issue_url: Mapped[str] = mapped_column(sa.String(512), nullable=False)

    # 任务描述
    description: Mapped[str] = mapped_column(sa.Text, nullable=False)

    # 状态:open / closed
    status: Mapped[str] = mapped_column(sa.String(16), default="open", nullable=False)

    # 创建者
    created_by: Mapped[str] = mapped_column(sa.String(128), nullable=False)

    # 责任人(PR 提交人,也是 Issue 的 assignee)
    assignee: Mapped[str] = mapped_column(sa.String(128), nullable=True)

    # 时间
    created_at: Mapped[datetime.datetime] = mapped_column(
        sa.DateTime, nullable=False, server_default=func.now(),
    )
    updated_at: Mapped[datetime.datetime] = mapped_column(
        sa.DateTime, nullable=False, server_default=func.now(), onupdate=func.now(),
    )

    __table_args__ = (
        sa.Index("idx_lt_pr_id", "pr_id"),
        sa.Index("idx_lt_status", "status"),
    )

    def __repr__(self) -> str:
        return (
            f"<LeftoverTask(id={self.id}, pr_id={self.pr_id}, "
            f"issue_id={self.issue_id}, status={self.status})>"
        )