"""
Migration script to add activities table to the database.
"""
from sqlalchemy import create_engine, text
from database import DATABASE_URL
import logging

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


def migrate():
    """Add activities table to the database."""
    engine = create_engine(DATABASE_URL)
    
    with engine.connect() as conn:
        try:
            # Create activities table
            logger.info("Creating activities table...")
            conn.execute(text("""
                CREATE TABLE IF NOT EXISTS activities (
                    id INTEGER PRIMARY KEY AUTOINCREMENT,
                    type VARCHAR(50) NOT NULL,
                    user_id INTEGER NOT NULL,
                    project_id INTEGER,
                    task_id INTEGER,
                    asset_id INTEGER,
                    shot_id INTEGER,
                    submission_id INTEGER,
                    description TEXT NOT NULL,
                    activity_metadata TEXT,
                    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
                    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
                    FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE,
                    FOREIGN KEY (task_id) REFERENCES tasks(id) ON DELETE CASCADE,
                    FOREIGN KEY (asset_id) REFERENCES assets(id) ON DELETE CASCADE,
                    FOREIGN KEY (shot_id) REFERENCES shots(id) ON DELETE CASCADE,
                    FOREIGN KEY (submission_id) REFERENCES submissions(id) ON DELETE CASCADE
                )
            """))
            
            # Create indexes for activities
            logger.info("Creating indexes for activities table...")
            conn.execute(text("""
                CREATE INDEX IF NOT EXISTS idx_activities_type 
                ON activities(type)
            """))
            
            conn.execute(text("""
                CREATE INDEX IF NOT EXISTS idx_activities_user_id 
                ON activities(user_id)
            """))
            
            conn.execute(text("""
                CREATE INDEX IF NOT EXISTS idx_activities_project_id 
                ON activities(project_id)
            """))
            
            conn.execute(text("""
                CREATE INDEX IF NOT EXISTS idx_activities_created_at 
                ON activities(created_at)
            """))
            
            conn.commit()
            logger.info("✅ Activities table created successfully!")
            
        except Exception as e:
            logger.error(f"❌ Migration failed: {str(e)}")
            conn.rollback()
            raise


if __name__ == "__main__":
    migrate()
