#!/usr/bin/env python3
"""
모든 ResizableDialogContent에 modalId와 userId를 추가하는 스크립트
"""

import os
import re
from pathlib import Path

def process_file(file_path):
    """파일을 처리하여 modalId와 userId를 추가"""
    with open(file_path, 'r', encoding='utf-8') as f:
        content = f.read()
    
    original_content = content
    modified = False
    
    # 파일명에서 modalId 생성 (예: UserFormModal.tsx -> user-form-modal)
    file_name = Path(file_path).stem
    modal_id = re.sub(r'(?<!^)(?=[A-Z])', '-', file_name).lower()
    
    # useAuth import 확인
    has_use_auth = 'useAuth' in content
    
    # useAuth import 추가 (없으면)
    if not has_use_auth and 'ResizableDialogContent' in content:
        # import 섹션 찾기
        import_match = re.search(r'(import.*from.*;\n)', content)
        if import_match:
            last_import_pos = content.rfind('import')
            next_newline = content.find('\n', last_import_pos)
            if next_newline != -1:
                content = (
                    content[:next_newline + 1] +
                    'import { useAuth } from "@/hooks/useAuth";\n' +
                    content[next_newline + 1:]
                )
                modified = True
    
    # 함수 컴포넌트 내부에 useAuth 추가
    # 패턴: export default function ComponentName() { 또는 const ComponentName = () => {
    if 'ResizableDialogContent' in content and 'const { user } = useAuth();' not in content:
        # 함수 시작 부분 찾기
        patterns = [
            r'(export default function \w+\([^)]*\)\s*\{)',
            r'(export function \w+\([^)]*\)\s*\{)',
            r'(const \w+ = \([^)]*\)\s*=>\s*\{)',
            r'(function \w+\([^)]*\)\s*\{)',
        ]
        
        for pattern in patterns:
            match = re.search(pattern, content)
            if match:
                insert_pos = match.end()
                # 이미 useAuth가 있는지 확인
                next_100_chars = content[insert_pos:insert_pos + 200]
                if 'useAuth' not in next_100_chars:
                    content = (
                        content[:insert_pos] +
                        '\n  const { user } = useAuth();' +
                        content[insert_pos:]
                    )
                    modified = True
                break
    
    # ResizableDialogContent에 modalId와 userId 추가
    # 패턴: <ResizableDialogContent ... > (modalId가 없는 경우)
    pattern = r'<ResizableDialogContent\s+([^>]*?)(?<!modalId=")>'
    
    def add_props(match):
        nonlocal modified
        props = match.group(1).strip()
        
        # 이미 modalId가 있는지 확인
        if 'modalId=' in props:
            return match.group(0)
        
        # props가 있으면 끝에 추가, 없으면 새로 추가
        if props:
            if not props.endswith(' '):
                props += ' '
            new_props = f'{props}modalId="{modal_id}" userId={{user?.userId}}'
        else:
            new_props = f'modalId="{modal_id}" userId={{user?.userId}}'
        
        modified = True
        return f'<ResizableDialogContent {new_props}>'
    
    content = re.sub(pattern, add_props, content)
    
    # 변경사항이 있으면 파일 저장
    if modified and content != original_content:
        with open(file_path, 'w', encoding='utf-8') as f:
            f.write(content)
        return True
    
    return False

def main():
    """메인 함수"""
    frontend_dir = Path('frontend/components')
    
    if not frontend_dir.exists():
        print(f"❌ 디렉토리를 찾을 수 없습니다: {frontend_dir}")
        return
    
    # 모든 .tsx 파일 찾기
    tsx_files = list(frontend_dir.rglob('*.tsx'))
    
    modified_files = []
    
    for file_path in tsx_files:
        # ResizableDialogContent가 있는 파일만 처리
        with open(file_path, 'r', encoding='utf-8') as f:
            content = f.read()
            if 'ResizableDialogContent' not in content:
                continue
        
        if process_file(file_path):
            modified_files.append(file_path)
            print(f"✅ {file_path}")
    
    print(f"\n🎉 총 {len(modified_files)}개 파일 수정 완료!")
    
    if modified_files:
        print("\n수정된 파일 목록:")
        for f in modified_files:
            print(f"  - {f}")

if __name__ == '__main__':
    main()

