from sqlalchemy import ForeignKey, Integer, Text
from sqlalchemy.orm import Mapped, mapped_column

from scribe.models import Base
from scribe.models.base import TimestampMixin, iso


class NoteDraft(Base, TimestampMixin):
    __tablename__ = "note_drafts"

    id: Mapped[int] = mapped_column(primary_key=True)
    note_id: Mapped[int] = mapped_column(Integer, ForeignKey("notes.id", ondelete="CASCADE"))
    user_id: Mapped[int] = mapped_column(Integer, ForeignKey("users.id", ondelete="CASCADE"))
    proposed_body: Mapped[str] = mapped_column(Text)
    original_body: Mapped[str] = mapped_column(Text)
    instruction: Mapped[str] = mapped_column(Text, default="")
    scope: Mapped[str] = mapped_column(Text, default="document")

    def to_dict(self) -> dict:
        return {
            "id": self.id,
            "note_id": self.note_id,
            "user_id": self.user_id,
            "proposed_body": self.proposed_body,
            "original_body": self.original_body,
            "instruction": self.instruction,
            "scope": self.scope,
            "created_at": iso(self.created_at),
            "updated_at": iso(self.updated_at),
        }
