from typing import List
from fastapi import HTTPException
from pydantic import BaseModel, Field
from sqlalchemy import Integer, VARCHAR, Enum, ForeignKey, Text
from sqlalchemy.orm import Mapped,Session,mapped_column,relationship
from app.models.main import Base
from app.utils.schemas_utils import CustomModel

class SendMailBase(BaseModel):
    send_id : int | None = Field(default=None)
    from_mail : str | None = Field(default=None)
    to_mail : List[str] | None = Field(default=None)
    subject : str | None = Field(default=None)
    attach_file : str | None = Field(default=None)
    body : str | None = Field(default=None)
    group_code : str | None = Field(default=None)
    simulation_code : str | None = Field(default=None)

class TblSendMail(Base):
    __tablename__ = "tbl_send_mail"
    send_id : Mapped[int] = mapped_column("send_id", Integer, primary_key=True, autoincrement=True)
    from_mail : Mapped[str] = mapped_column("from_mail", VARCHAR(255), nullable=True, server_default=None)
    to_mail : Mapped[List[str]] = mapped_column("to_mail", VARCHAR(1000), nullable=True, server_default=None)
    subject : Mapped[str] = mapped_column("subject", VARCHAR(1000), nullable=True, server_default=None)
    attach_file : Mapped[str] = mapped_column("attach_file", VARCHAR(255), nullable=True, server_default=None)
    body : Mapped[str] = mapped_column("body", VARCHAR(5000), nullable=True, server_default=None)
    group_code : Mapped[str] = mapped_column("group_code", VARCHAR(255), nullable=True, server_default=None)
    simulation_code : Mapped[str] = mapped_column("simulation_code", VARCHAR(255), nullable=True, server_default=None)
    
    @classmethod
    def create_data(cls, data: SendMailBase, db: Session) -> "TblSendMail":
        new_data = cls(**data.model_dump())  
        db.add(new_data)  
        db.flush() 
        return new_data
    