"""
导出应用安装包功能
"""
from pathlib import Path
import shutil
from datetime import datetime
from jingrow.utils.path import get_files_dir

def export_app_package_from_local(app_name: str, apps_dir: Path):
	"""从本地应用目录打包应用安装包"""
	timestamp = datetime.now().strftime("%Y%m%d-%H%M%S")
	root = Path(__file__).resolve().parents[4]
	
	# 使用 tmp 作为临时打包目录
	tmp_dir = root / "tmp"
	tmp_dir.mkdir(parents=True, exist_ok=True)
	
	# files 目录用于存放最终导出文件
	
	files_dir = get_files_dir()
	app_source_dir = apps_dir / app_name
	if not app_source_dir.exists():
		return {
			"success": False,
			"error": f"本地应用目录不存在: {app_source_dir}"
		}
	
	# 创建临时打包目录
	final_dir = tmp_dir / app_name
	if final_dir.exists():
		shutil.rmtree(final_dir)
	final_dir.mkdir(parents=True, exist_ok=True)
	
	# 复制整个应用（包含后端和前端）
	source = app_source_dir
	
	for item in source.iterdir():
		if item.name in ['__pycache__', '.git', '.DS_Store']:
			continue
		dst = final_dir / item.name
		if item.is_dir():
			shutil.copytree(item, dst, dirs_exist_ok=True)
		else:
			shutil.copy2(item, dst)
	
	# 打包为 ZIP
	final_filename = f"{app_name}-{timestamp}.zip"
	base_name = tmp_dir / f"{app_name}-{timestamp}"
	# 生成 {base_name}.zip，压缩 tmp_dir 下的 app_name 目录
	shutil.make_archive(str(base_name), 'zip', root_dir=str(tmp_dir), base_dir=app_name)
	
	# 移动到 files 目录
	final_zip_path = files_dir / final_filename
	shutil.move(str(base_name) + ".zip", str(final_zip_path))
	
	# 清理临时目录
	shutil.rmtree(final_dir, ignore_errors=True)
	
	return {
		"success": True,
		"filename": final_filename,
		"file_path": str(final_zip_path),
		"message": f"应用安装包已导出到: {final_zip_path}"
	}
