# app/core/services/session.py

from sqlalchemy.orm import Session
from sqlalchemy.exc import SQLAlchemyError
from app.db import models

class SessionService:
    def __init__(self):
        pass
    
    def create_session(
        self, 
        db: Session, 
        user_id: str, 
        provider_name: str, 
        feature_name: str = "default",
        stt_provider_name: str = None,
        tts_provider_name: str = None
    ) -> models.Session:
        """
        Creates a new chat session in the database.
        
        Args:
            db (Session): The SQLAlchemy database session.
            user_id (str): The ID of the user creating the session.
            provider_name (str): The name of the LLM provider for the session.
            feature_name (str): The feature namespace the session belongs to.
            
        Returns:
            models.Session: The newly created session object.
            
        Raises:
            SQLAlchemyError: If a database error occurs during session creation.
        """
        try:
            new_session = models.Session(
                user_id=user_id, 
                provider_name=provider_name, 
                stt_provider_name=stt_provider_name,
                tts_provider_name=tts_provider_name,
                feature_name=feature_name, 
                title=f"New Chat Session"
            )
            db.add(new_session)
            db.commit()
            db.refresh(new_session)
            return new_session
        except SQLAlchemyError as e:
            db.rollback()
            raise