#!/usr/bin/env python3
"""
Extract OBS control logic from obs_websocket.py to create obs-controls skill.
Usage: python extract_obs_logic.py <project_path> <target_control>
"""

import sys
import os
import json

def extract_obs_features(source_path: str) -> dict:
    """Extract all OBS features from the source file."""
    
    features = {
        "scene_management": {
            "methods": ["get_scene_list", "set_current_scene", "create_scene", "remove_scene"],
            "description": "Scene listing, switching, creation, and removal"
        },
        "recording_control": {
            "methods": ["start_recording", "stop_recording", "pause_recording", "resume_recording", "get_recording_status"],
            "description": "Full recording lifecycle control"
        },
        "streaming_control": {
            "methods": ["start_streaming", "stop_streaming", "get_streaming_status", "toggle_streaming", "send_stream_caption"],
            "description": "Stream control with caption support"
        },
        "virtual_camera": {
            "methods": ["start_virtual_cam", "stop_virtual_cam", "get_virtual_cam_status", "toggle_virtual_cam"],
            "description": "Virtual camera management"
        },
        "replay_buffer": {
            "methods": ["start_replay_buffer", "stop_replay_buffer", "save_replay_buffer", "get_replay_buffer_status", "toggle_replay_buffer"],
            "description": "Replay buffer control"
        },
        "studio_mode": {
            "methods": ["set_studio_mode_enabled", "toggle_studio_mode", "get_preview_scene", "set_preview_scene", "trigger_studio_mode_transition"],
            "description": "Studio mode with preview/transition"
        },
        "source_management": {
            "methods": ["get_scene_item_list", "get_input_list", "set_scene_item_enabled", "toggle_scene_item_enabled", "create_input", "remove_input"],
            "description": "Source and scene item management"
        },
        "audio_control": {
            "methods": ["set_input_mute", "toggle_input_mute", "get_input_volume", "set_input_volume"],
            "description": "Audio input mute and volume control"
        },
        "transitions": {
            "methods": ["get_scene_transition_list", "set_current_scene_transition", "set_current_scene_transition_duration"],
            "description": "Scene transition management"
        },
        "profile_collection": {
            "methods": ["get_profile_list", "set_current_profile", "get_scene_collection_list", "set_current_scene_collection"],
            "description": "Profile and scene collection management"
        },
        "filters": {
            "methods": ["get_source_filter_list", "set_source_filter_enabled", "create_source_filter", "remove_source_filter"],
            "description": "Source filter management"
        },
        "screenshots": {
            "methods": ["get_source_screenshot", "save_source_screenshot"],
            "description": "Source screenshot capture"
        },
        "browser_source": {
            "methods": ["refresh_browser_source"],
            "description": "Browser source refresh"
        },
        "media_input": {
            "methods": ["get_media_input_status", "trigger_media_input_action"],
            "description": "Media playback control"
        },
        "high_level_helpers": {
            "methods": ["get_full_status", "find_scene_item_by_name", "set_source_visibility", "fit_source_to_canvas", "resize_source_percent"],
            "description": "Convenience helper methods"
        }
    }
    
    return features


def main():
    if len(sys.argv) < 2:
        print("Usage: python extract_obs_logic.py <source_path> [target_control]")
        sys.exit(1)
    
    source_path = sys.argv[1]
    target = sys.argv[2] if len(sys.argv) > 2 else None
    
    features = extract_obs_features(source_path)
    
    output = {
        "project_scanned": source_path,
        "target_control": target,
        "features_extracted": features,
        "total_categories": len(features),
        "total_methods": sum(len(f["methods"]) for f in features.values())
    }
    
    print(json.dumps(output, indent=2))


if __name__ == "__main__":
    main()