from src import db
from sqlalchemy.orm import mapped_column, Mapped, relationship
from sqlalchemy import Integer, String, JSON, ForeignKey, Boolean
from datetime import datetime, timezone
from typing import List, Dict


class TeacherAssessmentTable(db.Model):
    __tablename__ = "teacher_assessments"

    id: Mapped[int] = mapped_column(Integer(), primary_key=True, autoincrement=True)
    school_id: Mapped[int] = mapped_column(ForeignKey("schools.id"), nullable=False)
    created_by: Mapped[int] = mapped_column(ForeignKey("teachers.id"), nullable=False)
    grade: Mapped[str] = mapped_column(String(10), nullable=False)
    section: Mapped[str] = mapped_column(String(10), nullable=False)
    concepts: Mapped[List[str]] = mapped_column(JSON, nullable=False)
    questions: Mapped[List[Dict]] = mapped_column(JSON, nullable=False)
    is_verified: Mapped[bool] = mapped_column(Boolean, default=False, nullable=False)
    created_at: Mapped[datetime] = mapped_column(default=lambda: datetime.now(timezone.utc))

    school = relationship("SchoolTable")
    teacher = relationship("TeacherTable")