import logging
from app.db.session import engine
from sqlalchemy import text, inspect

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

def run_migrations():
    """
    Checks for missing columns and adds them if necessary.
    This is a simple idempotent migration system to handle schema updates.
    """
    logger.info("Starting database migrations...")
    
    with engine.connect() as conn:
        inspector = inspect(engine)
        if not inspector.has_table("messages"):
            logger.info("Table 'messages' does not exist, skipping migrations (will be handled by Base.metadata.create_all).")
            return

        columns = [c["name"] for c in inspector.get_columns("messages")]
        
        # List of (column_name, column_type) to ensure existence
        required_columns = [
            ("audio_path", "TEXT"),
            ("model_response_time", "INTEGER"),
            ("token_count", "INTEGER")
        ]
        
        for col_name, col_type in required_columns:
            if col_name not in columns:
                logger.info(f"Adding column '{col_name}' to 'messages' table...")
                try:
                    conn.execute(text(f"ALTER TABLE messages ADD COLUMN {col_name} {col_type}"))
                    conn.commit()
                    logger.info(f"Successfully added '{col_name}'.")
                except Exception as e:
                    logger.error(f"Failed to add column '{col_name}': {e}")
            else:
                logger.info(f"Column '{col_name}' already exists in 'messages'.")

        # Session table migrations
        session_columns = [c["name"] for c in inspector.get_columns("sessions")]
        session_required_columns = [
            ("stt_provider_name", "TEXT"),
            ("tts_provider_name", "TEXT")
        ]
        for col_name, col_type in session_required_columns:
            if col_name not in session_columns:
                logger.info(f"Adding column '{col_name}' to 'sessions' table...")
                try:
                    conn.execute(text(f"ALTER TABLE sessions ADD COLUMN {col_name} {col_type}"))
                    conn.commit()
                    logger.info(f"Successfully added '{col_name}'.")
                except Exception as e:
                    logger.error(f"Failed to add column '{col_name}': {e}")
            else:
                logger.info(f"Column '{col_name}' already exists in 'sessions'.")

    logger.info("Database migrations complete.")

if __name__ == "__main__":
    run_migrations()
