import argparse
import os

import cv2


def parse_args():
    parser = argparse.ArgumentParser(description="Generate ArUco marker images.")
    parser.add_argument(
        "--dict",
        default="DICT_4X4_50",
        help="ArUco dictionary name, e.g., DICT_4X4_50",
    )
    parser.add_argument(
        "--ids",
        default="0,1,2,3",
        help="Comma-separated marker IDs to generate, e.g., 0,1,2,3",
    )
    parser.add_argument(
        "--size",
        type=int,
        default=400,
        help="Marker image size in pixels (square).",
    )
    parser.add_argument(
        "--out",
        default="aruco",
        help="Output folder for generated markers.",
    )
    return parser.parse_args()


def get_dictionary(dict_name):
    if not dict_name.startswith("DICT_"):
        dict_name = f"DICT_{dict_name}"
    if not hasattr(cv2.aruco, dict_name):
        raise ValueError(f"Unknown ArUco dictionary: {dict_name}")
    return cv2.aruco.getPredefinedDictionary(getattr(cv2.aruco, dict_name))


def main():
    args = parse_args()
    os.makedirs(args.out, exist_ok=True)

    dictionary = get_dictionary(args.dict)
    ids = [int(x.strip()) for x in args.ids.split(",") if x.strip() != ""]
    if not ids:
        raise ValueError("No marker IDs provided.")

    for marker_id in ids:
        if hasattr(cv2.aruco, "generateImageMarker"):
            marker = cv2.aruco.generateImageMarker(dictionary, marker_id, args.size)
        else:
            marker = cv2.aruco.drawMarker(dictionary, marker_id, args.size)
        filename = os.path.join(args.out, f"aruco_{args.dict}_{marker_id}.png")
        cv2.imwrite(filename, marker)
        print(f"Saved: {filename}")


if __name__ == "__main__":
    main()
