"""订单模型：映射源库 order_info。"""
from __future__ import annotations

from datetime import datetime

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

from app.models.base import SourceBase


class OrderInfo(SourceBase):
    """订单表（源库）：订单号 + 选中的设备分类。"""

    __tablename__ = "order_info"

    id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
    order_no: Mapped[str] = mapped_column(String(64), unique=True, nullable=False)
    enterprise_id: Mapped[int | None] = mapped_column(Integer, nullable=True)
    # 结构：{"Haushaltselektrogeräte": ["Kleingeräte"], "Gewerbliche Elektrogeräte": ["Photovoltaikmodule"]}
    categories: Mapped[dict] = mapped_column(JSON, nullable=False, default=dict)
    created_at: Mapped[datetime] = mapped_column(DateTime, server_default=func.now())

    def to_dict(self) -> dict:
        return {
            "id": self.id,
            "order_no": self.order_no,
            "enterprise_id": self.enterprise_id,
            "categories": self.categories or {},
            "created_at": self.created_at.isoformat() if self.created_at else None,
        }
