import json
import cv2
import argparse
import sys

class ContourExtractor:
    def __init__(self, image_path):
        self.image = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)
        if self.image is None:
            raise ValueError("Cannot load image")

    def get_contours(self):
        contours, _ = cv2.findContours(
            self.image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE
        )
        formatted = []
        for contour in contours:
            points = [{"x": int(pt[0][0]), "y": int(pt[0][1])} for pt in contour]
            formatted.extend(points)
        return formatted

def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('image_path')
    parser.add_argument('--element_type')
    args = parser.parse_args()

    try:
        extractor = ContourExtractor(args.image_path)
        contours = extractor.get_contours()

        print(json.dumps({
            "contours": [{
                "class_name": args.element_type or "unknown",
                "contours": contours
            }]
        }))

    except Exception as e:
        print(json.dumps({"error": str(e)}))
        sys.exit(1)

if __name__ == '__main__':
    main()
