"""CheckoutLineItem ORM model."""
from typing import Optional, TYPE_CHECKING

from sqlalchemy import Integer, String, Float, ForeignKey
from sqlalchemy.orm import Mapped, mapped_column, relationship

from src.apps.base.models.base import Base

if TYPE_CHECKING:
    from src.apps.checkouts.models.checkout import Checkout


class CheckoutLineItem(Base):
    __tablename__ = "checkout_line_items"

    id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
    checkout_id: Mapped[int] = mapped_column(Integer, ForeignKey("checkouts.id"), nullable=False, index=True)
    product_id: Mapped[Optional[int]] = mapped_column(Integer, ForeignKey("products.id"), nullable=True)
    description: Mapped[Optional[str]] = mapped_column(String(255), nullable=True)
    quantity: Mapped[float] = mapped_column(Float, nullable=False, default=1.0)
    unit_price: Mapped[float] = mapped_column(Float, nullable=False, default=0.0)
    discount_amount: Mapped[float] = mapped_column(Float, nullable=False, default=0.0)
    tax: Mapped[Optional[float]] = mapped_column(Float, default=0.0, nullable=True)
    tax_amount: Mapped[Optional[float]] = mapped_column(Float, default=0.0, nullable=True)

    checkout: Mapped["Checkout"] = relationship("Checkout", back_populates="line_items")
