from sqlmodel import SQLModel, create_engine, Session
from pydantic_settings import BaseSettings, SettingsConfigDict
from typing import Optional

class Settings(BaseSettings):
    OPENAI_API_KEY: str
    DATABASE_URL: str
    SECRET_KEY: str = "your-secret-key-change-me-in-production"
    ALGORITHM: str = "HS256"
    ACCESS_TOKEN_EXPIRE_MINUTES: int = 30
    
    # SMTP Settings
    SMTP_SERVER: str = "smtp.gmail.com"
    SMTP_PORT: int = 587
    SMTP_USER: str = ""
    SMTP_PASSWORD: str = ""

    model_config = SettingsConfigDict(env_file=".env", extra="ignore")

settings = Settings()

# Create the database engine
engine = create_engine(settings.DATABASE_URL, echo=True)

def create_db_and_tables():
    print(f"Connecting to database at: {settings.DATABASE_URL.split('@')[-1]}") # Log host only for safety
    try:
        SQLModel.metadata.create_all(engine)
        print("Database tables verified/created successfully.")
    except Exception as e:
        print(f"FAILED to connect to database: {e}")
        raise e

def get_session():
    with Session(engine) as session:
        yield session
