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.modules.platform_ops.services.fleet_rollout_service import FleetRolloutService

# edited by glg


def parse_args():
    parser = argparse.ArgumentParser(description="Bangun rencana rollout config/deploy bertahap (canary + waves).")
    parser.add_argument("--branches-file", required=True, help="Path JSON list branch IDs.")
    parser.add_argument("--config-version", required=True, help="Versi config/deploy target.")
    parser.add_argument("--canary-percent", type=int, default=1)
    parser.add_argument(
        "--waves",
        default="5,20,50,100",
        help="Daftar persen stage dipisah koma, contoh: 5,20,50,100",
    )
    parser.add_argument("--output", default="")
    return parser.parse_args()


def _parse_waves(raw: str):
    out = []
    for part in str(raw or "").split(","):
        part = part.strip()
        if not part:
            continue
        try:
            out.append(int(part))
        except Exception:
            continue
    return out or [5, 20, 50, 100]


def main():
    args = parse_args()
    ids = json.loads(Path(args.branches_file).read_text(encoding="utf-8-sig"))
    service = FleetRolloutService()
    plan = service.build_rollout_plan(
        branch_ids=ids,
        config_version=args.config_version,
        canary_percent=args.canary_percent,
        wave_percents=_parse_waves(args.waves),
    )

    payload = json.dumps(plan, ensure_ascii=False, indent=2)
    if args.output:
        Path(args.output).write_text(payload, encoding="utf-8")
    print(payload)


if __name__ == "__main__":
    main()
