from src import db
from sqlalchemy.orm import mapped_column, Mapped
from sqlalchemy import Integer, String, JSON, ForeignKey
from datetime import datetime, timezone
from typing import List, Dict, Optional

class StudentAssesmentResultTable(db.Model):
    __tablename__ = "student_assesment_results"

    id: Mapped[int] = mapped_column(Integer(), nullable=False, primary_key=True, autoincrement=True)
    student_id: Mapped[int] = mapped_column(ForeignKey("students.id"), nullable=False)
    school_id: Mapped[int] = mapped_column(ForeignKey("schools.id"), nullable=False)
    grade: Mapped[str] = mapped_column(String(10), nullable=False)
    section: Mapped[str] = mapped_column(String(10), nullable=False)
    assesment_id: Mapped[Optional[int]] = mapped_column(ForeignKey("teacher_assessments.id"), nullable=True)
    concept_detail: Mapped[List[Dict]] = mapped_column(JSON, nullable=False)  # [{conceptname: "fraction", total: 15, correct: 12}, {}, {}]
    subconcept_detail: Mapped[List[Dict]] = mapped_column(JSON, nullable=True)  # New: [{concept: "Math", subconcept: "Addition", total: 5, correct: 4}, {}]
    concepts_with_subconcepts: Mapped[List[Dict]] = mapped_column(JSON, nullable=True)  # New: Original concept selection data
    submitted_at: Mapped[datetime] = mapped_column(default=lambda: datetime.now(timezone.utc))