#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
离线模型准备脚本（建议在“有网机器”执行一次）

用途：
- 将 PaddleOCR 2.10.0（PP-OCRv4 中文）所需模型下载到指定 models/ 目录
- 该 models/ 目录可直接随 Windows zip 目录包分发，实现完全离线运行

设计说明：
- 脚本只做“下载/补齐”，不做删除或覆盖，避免误删用户已有模型（高风险操作）
"""

from __future__ import annotations

import argparse
import os
from pathlib import Path


def parse_args() -> argparse.Namespace:
    parser = argparse.ArgumentParser(description="准备 post-ocr 离线模型（PP-OCRv4 中文）")
    parser.add_argument(
        "--models-dir",
        default="models",
        help="模型输出目录（默认：models，建议与 exe 同级）",
    )
    return parser.parse_args()


def main() -> int:
    args = parse_args()
    models_dir = Path(args.models_dir).resolve()
    models_dir.mkdir(parents=True, exist_ok=True)

    # 关键：把 PaddleOCR 默认 base_dir 指到我们指定的 models/
    os.environ["PADDLE_OCR_BASE_DIR"] = str(models_dir)

    # 延迟导入：确保环境变量在模块加载前生效
    from paddleocr import PaddleOCR  # pylint: disable=import-error

    print(f"将下载/补齐模型到: {models_dir}")
    print("首次执行需要联网下载（约数百 MB），请耐心等待。")

    # 初始化会自动下载 det/rec 模型到 BASE_DIR/whl/...
    PaddleOCR(lang="ch", use_angle_cls=False, show_log=False)

    print("完成。你可以将该 models/ 目录随 zip 目录包一起分发（与 exe 同级）。")
    return 0


if __name__ == "__main__":
    raise SystemExit(main())
