"""结果记录模型：映射目标库 render_record。"""
from __future__ import annotations

import json
from datetime import datetime

from sqlalchemy import DateTime, Integer, String, Text, func
from sqlalchemy.orm import Mapped, mapped_column

from app.models.base import TargetBase


class RenderRecord(TargetBase):
    """文件替换结果记录表（目标库）。"""

    __tablename__ = "render_record"

    id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
    enterprise_id: Mapped[int | None] = mapped_column(Integer, nullable=True)
    order_id: Mapped[int | None] = mapped_column(Integer, nullable=True)
    template: Mapped[str] = mapped_column(String(255), nullable=False)
    output_name: Mapped[str] = mapped_column(String(255), nullable=False)
    output_path: Mapped[str] = mapped_column(String(500), nullable=False)
    pdf_path: Mapped[str | None] = mapped_column(String(500), nullable=True)
    replacements: Mapped[int] = mapped_column(Integer, nullable=False, default=0)
    unresolved: Mapped[str | None] = mapped_column(Text, nullable=True)
    status: Mapped[str] = mapped_column(String(32), nullable=False, default="success")
    message: Mapped[str | None] = mapped_column(String(500), nullable=True)
    created_at: Mapped[datetime] = mapped_column(DateTime, server_default=func.now())

    def to_dict(self) -> dict:
        return {
            "id": self.id,
            "enterprise_id": self.enterprise_id,
            "order_id": self.order_id,
            "template": self.template,
            "output_name": self.output_name,
            "output_path": self.output_path,
            "pdf_path": self.pdf_path,
            "replacements": self.replacements,
            "unresolved": json.loads(self.unresolved) if self.unresolved else [],
            "status": self.status,
            "message": self.message,
            "created_at": self.created_at.isoformat() if self.created_at else None,
        }
