#include "jsoncdaccord.h"
#include "internal.h"
#include "optional.h"

int _jdac_check_patternproperties(json_object *jobj, json_object *jschema) {
    //LOG_MOD(debug, ZLOG_MOD_JSCHEM, "%s\n", __func__);
    // check jobj non object is already checked

    json_object *jpatprops = json_object_object_get(jschema, "patternProperties");
    if (jpatprops) {
        if (!json_object_is_type(jpatprops, json_type_object)) {
            return JDAC_ERR_SCHEMA_ERROR;
        }

        json_object_object_foreach(jpatprops, jprop_key, jprop_val) {
            json_object_object_foreach(jobj, jobj_key, jobj_val) {
                int ret = _jdac_match_string_with_regex(jprop_key, jobj_key);
                if (ret == JDAC_REGEX_COMPILE_FAILED) {
                    return JDAC_ERR_SCHEMA_ERROR;
                } else if (ret == JDAC_REGEX_MATCH) {
                    int err = _jdac_validate_instance(jobj_val, jprop_val);
                    if (err) {
                        return err;
                    }
                } else if (ret == JDAC_REGEX_MISMATCH) {
                    //
                }
            }
        }
    }
    return JDAC_ERR_VALID;
}