import os
import re
import shutil

def extract_spine_files_by_text_search(directory):
    """
    通过文本搜索直接提取Spine的.atlas和.bin文件
    """
    for root, dirs, files in os.walk(directory):
        for file in files:
            if file.endswith('.json'):
                json_file = os.path.join(root, file)
                try:
                    # 读取文件内容为文本
                    with open(json_file, 'r', encoding='utf-8') as f:
                        content = f.read()
                except:
                    try:
                        with open(json_file, 'r', encoding='gbk') as f:
                            content = f.read()
                    except:
                        print(f"无法读取文件: {json_file}")
                        continue
                
                # 查找所有".bin"出现的位置
                bin_pattern = r'"([^"]+)",\s*"\.bin",\s*"([^"]*)"'
                matches = re.findall(bin_pattern, content, re.DOTALL)
                
                if matches:
                    for spine_name, atlas_content in matches:
                        # 清理文件名（移除可能的多余字符）
                        spine_name = spine_name.strip('"\'')
                        
                        # 创建.atlas文件
                        atlas_file = os.path.join(root, f'{spine_name}.atlas')
                        try:
                            # 处理转义字符
                            atlas_content = atlas_content.replace('\\n', '\n').replace('\\t', '\t')
                            with open(atlas_file, 'w', encoding='utf-8') as f:
                                f.write(atlas_content)
                            print(f"成功创建.atlas文件: {atlas_file}")
                        except Exception as e:
                            print(f"创建.atlas文件失败 {spine_name}: {e}")
                        
                        # 复制对应的.bin文件（如果存在）
                        bin_files = [f for f in os.listdir(root) if f.endswith('.bin')]
                        if len(bin_files) == 1:
                            src_bin = os.path.join(root, bin_files[0])
                            dst_bin = os.path.join(root, f'{spine_name}.skel')
                            shutil.copyfile(src_bin, dst_bin)
                            print(f"成功复制.bin文件: {dst_bin}")
                        elif len(bin_files) > 1:
                            print(f"警告: 目录中有多个.bin文件: {root}")
                        
                        # 复制对应的.png文件（如果存在）
                        png_files = [f for f in os.listdir(root) if f.endswith('.png')]
                        if len(png_files) == 1:
                            src_png = os.path.join(root, png_files[0])
                            dst_png = os.path.join(root, f'{spine_name}.png')
                            shutil.copyfile(src_png, dst_png)
                            print(f"成功复制.png文件: {dst_png}")
                        elif len(png_files) > 1:
                            print(f"警告: 目录中有多个.png文件: {root}")
                
                # 也查找".atlas"出现的位置（如果有直接使用.atlas的情况）
                atlas_pattern = r'"([^"]+)",\s*"\.atlas"'
                atlas_matches = re.findall(atlas_pattern, content)
                
                if atlas_matches:
                    for spine_name in atlas_matches:
                        spine_name = spine_name.strip('"\'')
                        print(f"找到.atlas引用: {spine_name}")

def simple_extract_all_bin_atlas(directory):
    """
    更简单的提取方法：直接搜索所有包含".bin"的JSON文件并处理
    """
    for root, dirs, files in os.walk(directory):
        for file in files:
            if file.endswith('.json'):
                json_file = os.path.join(root, file)
                print(f"处理文件: {json_file}")
                
                try:
                    with open(json_file, 'r', encoding='utf-8') as f:
                        content = f.read()
                    
                    # 查找".bin"模式
                    lines = content.split('\n')
                    for i, line in enumerate(lines):
                        if '".bin"' in line:
                            # 获取前一行（通常是文件名）
                            if i > 0:
                                prev_line = lines[i-1].strip()
                                # 提取文件名（在引号内的部分）
                                name_match = re.search(r'"([^"]+)"', prev_line)
                                if name_match:
                                    spine_name = name_match.group(1)
                                    print(f"找到Spine资源: {spine_name}")
                                    
                                    # 获取后一行或更多行作为atlas内容
                                    atlas_content = ""
                                    j = i + 1
                                    while j < len(lines) and not lines[j].strip().endswith('"'):
                                        atlas_content += lines[j] + '\n'
                                        j += 1
                                    
                                    # 创建.atlas文件
                                    if atlas_content:
                                        atlas_file = os.path.join(root, f'{spine_name}.atlas')
                                        with open(atlas_file, 'w', encoding='utf-8') as f:
                                            f.write(atlas_content)
                                        print(f"创建.atlas文件: {atlas_file}")
                
                except Exception as e:
                    print(f"处理文件失败 {json_file}: {e}")

if __name__ == "__main__":
    print("开始通过文本搜索提取Spine资源...")
    extract_spine_files_by_text_search('.')
    print("处理完成！")