from pydantic import BaseModel, Field, EmailStr
from typing import Optional
from datetime import datetime
from enum import Enum


# ----------------------------------------------------------------
# ENUMS
# ----------------------------------------------------------------
class CourseStatus(str, Enum):
    draft = "draft"
    active = "active"
    archived = "archived"
    deleted = "deleted"


# ----------------------------------------------------------------
# BASE SCHEMA (shared fields)
# ----------------------------------------------------------------
class CourseBase(BaseModel):
    course_id: Optional[str] = None
    topic: Optional[str] = None
    task_id: Optional[str] = None
    skills: Optional[str] = None
    degree: Optional[str] = None
    allocated_time: Optional[str] = None
    mode_of_delivery: Optional[str] = None
    tone: Optional[str] = None
    weblinks: Optional[str] = None
    language: Optional[str] = None
    content_description: Optional[str] = None
    content_outcomes: Optional[str] = None
    taxonomy: Optional[str] = None
    content_objectives: Optional[str] = None
    content_summary: Optional[str] = None
    outline: Optional[str] = None
    learning_approach: Optional[str] = None
    no_of_modules: Optional[int] = None
    level_of_difficulty: Optional[str] = None
    type_of_assessment: Optional[str] = None
    no_of_questions: Optional[int] = None
    # markdown_content: Optional[str] = None
    email: Optional[EmailStr] = None
    status: Optional[str] = None  # instead of Enum
    course_step: Optional[int] = 1
    course_imscc_url: Optional[str] = None
    is_deleted: Optional[bool] = False
    user_id: Optional[str] = None


# ----------------------------------------------------------------
# CREATE SCHEMA
# ----------------------------------------------------------------
class CourseCreate(CourseBase):
    """Schema for creating a new course."""
    topic: str = Field(..., description="The main topic of the course")
    user_id: int = Field(..., description="The ID of the user creating the course")


# ----------------------------------------------------------------
# UPDATE SCHEMA
# ----------------------------------------------------------------
class CourseUpdate(CourseBase):
    """Schema for updating an existing course."""
    pass


# ----------------------------------------------------------------
# RESPONSE SCHEMA
# ----------------------------------------------------------------
class CourseOut(CourseBase):
    """Schema for returning course data."""
    id: int
    created_at: datetime
    updated_at: datetime

    class Config:
        from_attributes = True  # Enables ORM compatibility with SQLAlchemy
