"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.useEditMetaInfo = void 0;
var react_1 = require("react");
var ramda_1 = require("ramda");
var mdm_sdk_1 = require("@reltio/mdm-sdk");
var MdmModuleContext_1 = require("../../../contexts/MdmModuleContext");
var useEditMetaInfo = function (_a) {
    var initialAttributeValue = _a.initialAttributeValue, attributeType = _a.attributeType;
    var modifyAttribute = (0, MdmModuleContext_1.useMdmAction)('modifyAttribute');
    var _b = (0, react_1.useState)(initialAttributeValue), attributeValue = _b[0], setAttributeValue = _b[1];
    (0, react_1.useEffect)(function () {
        setAttributeValue(initialAttributeValue);
    }, [initialAttributeValue]);
    var nestingLevel = 1;
    var hasChanges = !(0, ramda_1.equals)(attributeValue, initialAttributeValue);
    var addAttributes = (0, react_1.useCallback)(function (attributes) {
        setAttributeValue(function (prevAttrValue) {
            return attributes.reduce(function (attrValue, attribute) {
                var attributeType = attribute.attributeType, parentUri = attribute.parentUri, index = attribute.index;
                return (0, mdm_sdk_1.addAttribute)({
                    entity: attrValue,
                    attributeType: attributeType,
                    parentUri: parentUri,
                    index: index,
                    nestingLevel: nestingLevel
                });
            }, prevAttrValue);
        });
    }, []);
    var changeAttribute = (0, react_1.useCallback)(function (_a) {
        var value = _a.value, attributeType = _a.attributeType, uri = _a.uri;
        setAttributeValue(function (prevAttrValue) {
            return (0, mdm_sdk_1.editAttribute)({
                entity: prevAttrValue,
                attributeType: attributeType,
                uri: uri,
                value: value,
                nestingLevel: nestingLevel
            });
        });
    }, []);
    var deleteAttribute = (0, react_1.useCallback)(function (_a) {
        var attributeType = _a.attributeType, uri = _a.uri;
        setAttributeValue(function (prevAttrValue) {
            return (0, mdm_sdk_1.removeAttribute)({ entity: prevAttrValue, attributeType: attributeType, uri: uri, nestingLevel: nestingLevel });
        });
    }, []);
    var clearLocalChanges = (0, react_1.useCallback)(function () {
        setAttributeValue(initialAttributeValue);
    }, [initialAttributeValue]);
    var applyLocalChanges = (0, react_1.useCallback)(function () {
        modifyAttribute({ value: attributeValue, attributeType: attributeType, uri: attributeValue.uri });
    }, [attributeValue, attributeType, modifyAttribute]);
    return {
        addAttributes: addAttributes,
        changeAttribute: changeAttribute,
        deleteAttribute: deleteAttribute,
        clearLocalChanges: clearLocalChanges,
        applyLocalChanges: applyLocalChanges,
        attributeValue: attributeValue,
        hasChanges: hasChanges
    };
};
exports.useEditMetaInfo = useEditMetaInfo;
