import argparse
import json
import sys
from pathlib import Path

REPO_ROOT = Path(__file__).resolve().parents[2]
if str(REPO_ROOT) not in sys.path:
    sys.path.insert(0, str(REPO_ROOT))

from pypos.core.utils.path_utils import get_app_data_dir
from pypos.modules.platform_ops.services.dr_restore_drill_service import DrRestoreDrillService

# edited by glg


def parse_args():
    parser = argparse.ArgumentParser(description="Jalankan DR restore drill dari manifest backup.")
    parser.add_argument("--manifest", default="", help="Path ke manifest.json backup.")
    parser.add_argument(
        "--backup-root",
        default=str(Path(get_app_data_dir()) / "backups"),
        help="Folder backup root untuk auto-pilih manifest terbaru.",
    )
    parser.add_argument(
        "--restore-root",
        default=str(Path(get_app_data_dir()) / "restore_drill"),
        help="Folder output restore drill.",
    )
    return parser.parse_args()


def _find_latest_manifest(backup_root: str) -> str:
    root = Path(str(backup_root or "")).expanduser().resolve()
    if not root.exists() or not root.is_dir():
        return ""
    manifests = []
    for folder in root.iterdir():
        if not folder.is_dir():
            continue
        manifest = folder / "manifest.json"
        if manifest.exists() and manifest.is_file():
            manifests.append(manifest)
    if not manifests:
        return ""
    manifests.sort(key=lambda p: p.stat().st_mtime, reverse=True)
    return str(manifests[0])


def main():
    args = parse_args()
    manifest_path = str(args.manifest or "").strip() or _find_latest_manifest(args.backup_root)
    if not manifest_path:
        raise SystemExit("Manifest backup tidak ditemukan. Gunakan --manifest atau pastikan --backup-root valid.")

    service = DrRestoreDrillService(work_root=args.restore_root)
    result = service.run_restore_drill(manifest_path=manifest_path, restore_root=args.restore_root)
    print(json.dumps(result, ensure_ascii=False, indent=2))


if __name__ == "__main__":
    main()
