"use strict";
var __assign = (this && this.__assign) || function () {
    __assign = Object.assign || function(t) {
        for (var s, i = 1, n = arguments.length; i < n; i++) {
            s = arguments[i];
            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
                t[p] = s[p];
        }
        return t;
    };
    return __assign.apply(this, arguments);
};
var __rest = (this && this.__rest) || function (s, e) {
    var t = {};
    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
        t[p] = s[p];
    if (s != null && typeof Object.getOwnPropertySymbols === "function")
        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)
            t[p[i]] = s[p[i]];
    return t;
};
Object.defineProperty(exports, "__esModule", { value: true });
var assign = require("lodash/assign");
var React = require("react");
var utils = require("../../utils");
var Input_1 = require("../Input");
exports.operators = {
    is: {
        getLabel: function (_s) { return 'is'; },
    },
    is_more_than: {
        getLabel: function (_s) { return 'is more than'; },
    },
    is_less_than: {
        getLabel: function (_s) { return 'is less than'; },
    },
};
exports.decodeFilter = function (filter) {
    var operator = filter.title;
    if (!filter.properties) {
        return null;
    }
    var keys = Object.keys(filter.properties);
    if (!keys.length) {
        return null;
    }
    var value;
    var field = keys[0];
    if (operator === 'is') {
        value = filter.properties[field].const;
    }
    else if (operator === 'is_more_than') {
        value = filter.properties[field].exclusiveMinimum;
    }
    else if (operator === 'is_less_than') {
        value = filter.properties[field].exclusiveMaximum;
    }
    else {
        return null;
    }
    return {
        field: field,
        operator: operator,
        value: value,
    };
};
exports.createFilter = function (field, operator, value, schema) {
    var _a, _b, _c;
    var title = schema.title;
    var base = {
        $id: utils.randomString(),
        title: operator,
        description: (title || field) + " " + exports.operators[operator].getLabel(schema) + " " + value,
        type: 'object',
        required: [field],
    };
    if (operator === 'is') {
        return assign(base, {
            properties: (_a = {},
                _a[field] = {
                    type: 'number',
                    const: value,
                },
                _a),
            required: [field],
        });
    }
    if (operator === 'is_more_than') {
        return assign(base, {
            properties: (_b = {},
                _b[field] = {
                    type: 'number',
                    exclusiveMinimum: value,
                },
                _b),
            required: [field],
        });
    }
    if (operator === 'is_less_than') {
        return assign(base, {
            properties: (_c = {},
                _c[field] = {
                    type: 'number',
                    exclusiveMaximum: value,
                },
                _c),
        });
    }
    return base;
};
exports.Edit = function (_a) {
    var value = _a.value, onUpdate = _a.onUpdate, props = __rest(_a, ["value", "onUpdate"]);
    return (React.createElement(Input_1.default, __assign({}, props, { type: "number", value: value, onChange: function (e) {
            return onUpdate(parseFloat(e.currentTarget.value));
        } })));
};
