#!/usr/bin/env python3
"""
Update permission display_names to have human-readable names instead of API names.
"""
from sqlalchemy import create_engine, text
from sqlalchemy.orm import sessionmaker
import os

# Database URL
DATABASE_URL = os.getenv("DATABASE_URL", "postgresql://streama:streama@localhost:5432/streama2026")

# Create engine
engine = create_engine(DATABASE_URL)
Session = sessionmaker(bind=engine)
session = Session()

# Permission display names mapping
permission_display_names = {
    # General
    "get:/api/health": "System Health Check",
    "get:/api/settings": "View Settings",
    "put:/api/settings": "Update Settings",
    "get:/api/settings/{key}": "View Setting",
    "put:/api/settings/{key}": "Update Setting",
    "post:/api/settings/bulk": "Bulk Update Settings",
    "post:/api/settings/upload-favicon": "Upload Favicon",
    "post:/api/settings/upload-logo": "Upload Logo",
    
    # Authentication
    "post:/api/auth/login": "Login",
    "post:/api/auth/register": "Register",
    "post:/api/auth/logout": "Logout",
    "post:/api/auth/refresh": "Refresh Token",
    "get:/api/auth/me": "Get Current User",
    
    # Twitch Auth
    "get:/api/auth/twitch/login": "Twitch Login",
    "get:/api/auth/twitch/callback": "Twitch Callback",
    "post:/api/auth/twitch/unlink": "Unlink Twitch",
    
    # Streams
    "get:/api/streams": "View All Streams",
    "post:/api/streams": "Create Stream",
    "get:/api/streams/{stream_id}": "View Stream Details",
    "put:/api/streams/{stream_id}": "Update Stream",
    "delete:/api/streams/{stream_id}": "Delete Stream",
    "post:/api/streams/{stream_id}/upload": "Upload Stream",
    "post:/api/streams/{stream_id}/process": "Process Stream",
    "post:/api/streams/{stream_id}/re-download": "Re-download Stream",
    "post:/api/streams/{stream_id}/import-chat-json": "Import Chat",
    "get:/api/streams/{stream_id}/download-progress": "View Download Progress",
    "get:/api/streams/{stream_id}/processing-progress": "View Processing Progress",
    "post:/api/streams/{stream_id}/generate-thumbnails": "Generate Thumbnails",
    "get:/api/streams/{stream_id}/thumbnail/{segment_number}": "View Thumbnail",
    "get:/api/streams/{stream_id}/thumbnail-progress": "View Thumbnail Progress",
    "post:/api/streams/manual": "Manual Stream Import",
    "get:/api/streams/admin/all": "View All Streams (Admin)",
    "post:/api/streams/{stream_id}/play": "Play Stream",
    "put:/api/streams/{stream_id}/metadata": "Update Stream Metadata",
    "post:/api/streams/twitch-import": "Import from Twitch",
    "get:/api/streams/latest": "View Latest Streams",
    "get:/api/streams/popular": "View Popular Streams",
    "get:/api/streams/random": "View Random Streams",
    "get:/api/streams/search": "Search Streams",
    
    # Stream Chat
    "get:/api/streams/{stream_id}/chat": "View Chat",
    "post:/api/streams/{stream_id}/chat/upload": "Upload Chat",
    "get:/api/streams/{stream_id}/chat/proxy-image": "Proxy Chat Image",
    
    # Stream Comments
    "get:/api/streams/{stream_id}/comments": "View Comments",
    "post:/api/streams/{stream_id}/comments": "Create Comment",
    "put:/api/streams/{stream_id}/comments/{comment_id}": "Update Comment",
    "delete:/api/streams/{stream_id}/comments/{comment_id}": "Delete Comment",
    
    # Tags
    "get:/api/tags": "View All Tags",
    "post:/api/tags": "Create Tag",
    "post:/api/tags/streams/{stream_id}/{tag_id}": "Add Tag to Stream",
    "delete:/api/tags/streams/{stream_id}/{tag_id}": "Remove Tag from Stream",
    "get:/api/tags/streams/{stream_id}": "View Stream Tags",
    
    # Users
    "get:/api/users/me": "View My Profile",
    "put:/api/users/me": "Update My Profile",
    "post:/api/users/me/profile-image": "Upload Profile Image",
    "get:/api/users/me/watch-history": "View Watch History",
    "post:/api/users/me/watch-history": "Add to Watch History",
    "put:/api/users/me/watch-history/{stream_id}": "Update Watch History",
    "delete:/api/users/me/watch-history/{stream_id}": "Remove from Watch History",
    "get:/api/users/me/watch-history/stream/{stream_id}": "View Stream Watch History",
    
    # Admin
    "get:/api/admin/stats": "View System Stats",
    "get:/api/admin/users": "View All Users",
    "get:/api/admin/users/{user_id}": "View User Details",
    "put:/api/admin/users/{user_id}/activate": "Activate User",
    "put:/api/admin/users/{user_id}/deactivate": "Deactivate User",
    "delete:/api/admin/users/{user_id}": "Delete User",
    "put:/api/admin/users/{user_id}/role": "Update User Role",
    
    # Admin Backup
    "get:/api/admin/backup": "View Backups",
    "post:/api/admin/backup": "Create Backup",
    "get:/api/admin/backup/{backup_id}": "View Backup Details",
    "delete:/api/admin/backup/{backup_id}": "Delete Backup",
    "get:/api/admin/backup/{backup_id}/download": "Download Backup",
    "post:/api/admin/backup/restore": "Restore Backup",
    "get:/api/admin/backup/restore/status": "View Restore Status",
    "get:/api/admin/backup/{filename}": "View Backup File",
    "post:/api/admin/backup/create": "Create Backup",
    "post:/api/admin/backup/restore/{filename}": "Restore Backup File",
    "post:/api/admin/backup/upload": "Upload Backup",
    
    # Roles
    "get:/api/roles": "View All Roles",
    "post:/api/roles": "Create Role",
    "get:/api/roles/{role_id}": "View Role Details",
    "put:/api/roles/{role_id}": "Update Role",
    "delete:/api/roles/{role_id}": "Delete Role",
    "get:/api/roles/{role_id}/permissions": "View Role Permissions",
    "post:/api/roles/{role_id}/permissions": "Add Permission to Role",
    "put:/api/roles/{role_id}/permissions/bulk": "Bulk Update Role Permissions",
    "delete:/api/roles/{role_id}/permissions/{permission_id}": "Remove Permission from Role",
    
    # Permissions
    "get:/api/permissions": "View All Permissions",
    "post:/api/permissions": "Create Permission",
    "get:/api/permissions/{permission_id}": "View Permission Details",
    "put:/api/permissions/{permission_id}": "Update Permission",
    "delete:/api/permissions/{permission_id}": "Delete Permission",
}

try:
    # Update display_name for all permissions
    for name, display_name in permission_display_names.items():
        session.execute(
            text("UPDATE permissions SET display_name = :display_name WHERE name = :name"),
            {"display_name": display_name, "name": name}
        )
    
    session.commit()
    print(f"Updated {len(permission_display_names)} permissions with display names")
    
except Exception as e:
    session.rollback()
    print(f"Error updating permissions: {e}")
    raise
finally:
    session.close()
