import { jsx } from "react/jsx-runtime";
import { useEffect } from "react";
import { connect, mapProps, mapReadPretty, toArr } from "@tachybase/schema";
import { CloseCircleFilled, CloseOutlined, LoadingOutlined } from "@ant-design/icons";
import { Empty, Select, Spin, Tag } from "antd";
import { useTranslation } from "react-i18next";
import { useCollectionManager } from "../../../../data-source/index.mjs";
import { defaultFieldNames, useCompile } from "../../../../schema-component/index.mjs";
import { ReadPretty } from "../../../../schema-component/antd/select/ReadPretty.mjs";
const filterOption = (input, option)=>{
    var _option_label;
    return (null != (_option_label = null == option ? void 0 : option.label) ? _option_label : '').toLowerCase().includes((input || '').toLowerCase());
};
const SecondLevelSelect = connect((props)=>{
    const { objectValue, loading, value, rawOptions, defaultValue, firstLevelValue, collectionField, ...others } = props;
    const { t } = useTranslation();
    const compile = useCompile();
    const cm = useCollectionManager();
    let mode = props.multiple ? 'multiple' : props.mode;
    if (mode && ![
        'multiple',
        'tags'
    ].includes(mode)) mode = void 0;
    const toValue = (v)=>{
        if ([
            'tags',
            'multiple'
        ].includes(props.mode) || props.multiple) {
            if (v) return toArr(v);
            return;
        }
        return v;
    };
    const Parentoptions = cm.getCollectionFields("".concat(collectionField, ".").concat(firstLevelValue));
    const fieldParentTabsOptions = Parentoptions.map((item)=>{
        if ('m2o' === item.interface) return {
            ...item,
            label: compile(item.uiSchema.title),
            value: item.name
        };
    }).filter(Boolean);
    fieldParentTabsOptions.unshift({
        label: t('none'),
        value: 'none'
    });
    const matchedOption = fieldParentTabsOptions.find((option)=>option.value === value);
    const newValue = matchedOption ? value : 'none';
    useEffect(()=>{
        if (!matchedOption) {
            var _props_onChange;
            null == (_props_onChange = props.onChange) || _props_onChange.call(props, 'none');
        }
    }, [
        value,
        fieldParentTabsOptions
    ]);
    return /*#__PURE__*/ jsx(Select, {
        role: "button",
        "data-testid": "select-".concat(mode || 'single'),
        showSearch: true,
        filterOption: filterOption,
        allowClear: {
            clearIcon: /*#__PURE__*/ jsx(CloseCircleFilled, {
                role: "button",
                "aria-label": "icon-close-select"
            })
        },
        popupMatchSelectWidth: false,
        notFoundContent: loading ? /*#__PURE__*/ jsx(Spin, {}) : /*#__PURE__*/ jsx(Empty, {
            image: Empty.PRESENTED_IMAGE_SIMPLE
        }),
        value: toValue(newValue),
        defaultValue: toValue(defaultValue),
        tagRender: (props)=>/*#__PURE__*/ jsx(Tag, {
                role: "button",
                "aria-label": props.label,
                closeIcon: /*#__PURE__*/ jsx(CloseOutlined, {
                    role: "button",
                    "aria-label": "icon-close-tag"
                }),
                ...props,
                children: props.label
            }),
        options: fieldParentTabsOptions,
        ...others,
        onChange: (changed)=>{
            var _props_onChange;
            null == (_props_onChange = props.onChange) || _props_onChange.call(props, void 0 === changed ? null : changed);
        },
        mode: mode
    });
}, mapProps({
    dataSource: 'options'
}, (props, field)=>({
        ...props,
        fieldNames: {
            ...defaultFieldNames,
            ...props.fieldNames
        },
        suffixIcon: (null == field ? void 0 : field['loading']) || (null == field ? void 0 : field['validating']) ? /*#__PURE__*/ jsx(LoadingOutlined, {}) : props.suffixIcon
    })), mapReadPretty(ReadPretty));
export { SecondLevelSelect };
