import os
import zipfile
from typing import List

def zip_files(file_paths: List[str], output_zip_path: str, delete_after_zip:bool = True) -> bool:
    """
    将多个文件压缩为zip文件
    
    Args:
        file_paths: 要压缩的文件路径列表
        output_zip_path: 输出的zip文件路径
        
    Returns:
        bool: True表示压缩成功，False表示失败
    """
    try:
        # 确保输出目录存在
        os.makedirs(os.path.dirname(output_zip_path), exist_ok=True)
        
        with zipfile.ZipFile(output_zip_path, 'w', zipfile.ZIP_DEFLATED) as zipf:
            for file_path in file_paths:
                if os.path.exists(file_path):
                    # 将文件添加到zip中，保持相对路径结构
                    arcname = os.path.basename(file_path)
                    zipf.write(file_path, arcname)                    
                else:
                    raise FileNotFoundError(f"文件不存在: {file_path}")
        
        if delete_after_zip:
            for file_path in file_paths:
                os.remove(file_path)
        return True
        
    except Exception as e:
        print(f"压缩文件失败: {e}")
        return False

def unzip_files(zip_path: str, output_dir: str) -> bool:
    """
    解压缩zip文件到指定目录
    
    Args:
        zip_path: 要解压的zip文件路径
        output_dir: 解压输出目录
        
    Returns:
        bool: True表示解压成功，False表示失败
    """
    try:
        # 确保输出目录存在
        os.makedirs(output_dir, exist_ok=True)
        
        with zipfile.ZipFile(zip_path, 'r') as zipf:
            zipf.extractall(output_dir)
            
        return True
        
    except Exception as e:
        print(f"解压文件失败: {e}")
        return False
