import json
import os.path as osp

import labelme.utils


def assert_labelfile_sanity(filename):
    assert osp.exists(filename)

    data = json.load(open(filename))

    assert 'imagePath' in data
    imageData = data.get('imageData', None)
    if imageData is None:
        assert osp.exists(data['imagePath'])
    img = labelme.utils.img_b64_to_arr(imageData)

    H, W = img.shape[:2]
    assert 'shapes' in data
    for shape in data['shapes']:
        assert 'label' in shape
        assert 'points' in shape
        for x, y in shape['points']:
            assert 0 <= x <= W
            assert 0 <= y <= H