import { _ as _define_property } from "@swc/helpers/_/_define_property";
import { _ as _object_spread } from "@swc/helpers/_/_object_spread";
import { _ as _object_spread_props } from "@swc/helpers/_/_object_spread_props";
import { _ as _sliced_to_array } from "@swc/helpers/_/_sliced_to_array";
import React, { useContext, useEffect, useRef, useState } from "react";
import { Image, View } from "@tarojs/components";
import classNames from "classnames";
import { User } from "@nutui/icons-react-taro";
import { AvatarContext } from "../avatargroup/context";
import { ComponentDefaults } from "../../utils/typings";
import { harmony, td } from "../../utils/taro/platform";
import AvatarGroup from "../avatargroup/index";
import { pxTransform } from "../../utils/taro/px-transform";
var defaultProps = _object_spread_props(_object_spread({}, ComponentDefaults), {
    size: harmony() || td() ? '40' : '',
    shape: 'round',
    icon: '',
    background: '#eee',
    color: '#666',
    fit: 'cover',
    mode: 'scaleToFill',
    src: '',
    alt: '',
    avatarIndex: 0
});
var classPrefix = "nut-avatar";
export var Avatar = function(props) {
    var _$_object_spread = _object_spread({}, defaultProps, props), children = _$_object_spread.children, size = _$_object_spread.size, shape = _$_object_spread.shape, background = _$_object_spread.background, color = _$_object_spread.color, src = _$_object_spread.src, icon = _$_object_spread.icon, mode = _$_object_spread.mode, fit = _$_object_spread.fit, avatarIndex = _$_object_spread.avatarIndex, className = _$_object_spread.className, style = _$_object_spread.style, onClick = _$_object_spread.onClick, onError = _$_object_spread.onError;
    var _useState // 是否显示的最大头像个数
     = _sliced_to_array(useState(false), 2), showMax = _useState[0], setShowMax = _useState[1];
    var avatarRef = useRef(null);
    var parent = useContext(AvatarContext);
    var sizeValue = [
        'large',
        'normal',
        'small'
    ];
    var propAvatarGroup = parent.propAvatarGroup;
    var groupSize = propAvatarGroup === null || propAvatarGroup === void 0 ? void 0 : propAvatarGroup.size;
    var groupShape = propAvatarGroup === null || propAvatarGroup === void 0 ? void 0 : propAvatarGroup.shape;
    var groupCount = propAvatarGroup === null || propAvatarGroup === void 0 ? void 0 : propAvatarGroup.avatarCount;
    var groupMax = propAvatarGroup === null || propAvatarGroup === void 0 ? void 0 : propAvatarGroup.max;
    var _obj;
    var classes = classNames((_obj = {}, _define_property(_obj, "nut-avatar-".concat(groupSize || size || 'normal'), true), _define_property(_obj, "nut-avatar-".concat(groupShape || shape), true), _define_property(_obj, "nut-avatar-".concat(groupSize || size || 'normal', "-round"), shape === 'round' && true), _obj));
    var nativeClasses = classNames(_define_property({}, "nut-avatar-first-child", avatarIndex === 1));
    var cls = classNames(classPrefix, classes, className, nativeClasses);
    var _obj1;
    var styles = _object_spread((_obj1 = {
        width: sizeValue.indexOf(size) > -1 ? '' : pxTransform(parseInt(size)),
        height: sizeValue.indexOf(size) > -1 ? '' : pxTransform(parseInt(size)),
        backgroundColor: "".concat(background),
        color: color
    }, _define_property(_obj1, harmony() ? 'marginRight' : 'marginLeft', avatarIndex !== 1 && (propAvatarGroup === null || propAvatarGroup === void 0 ? void 0 : propAvatarGroup.gap) ? "".concat(propAvatarGroup === null || propAvatarGroup === void 0 ? void 0 : propAvatarGroup.gap, "px") : ''), _define_property(_obj1, "zIndex", (propAvatarGroup === null || propAvatarGroup === void 0 ? void 0 : propAvatarGroup.level) === 'right' ? Math.abs(groupCount - avatarIndex) : ''), _obj1), style);
    var maxStyles = {
        backgroundColor: "".concat(propAvatarGroup === null || propAvatarGroup === void 0 ? void 0 : propAvatarGroup.maxBackground),
        color: "".concat(propAvatarGroup === null || propAvatarGroup === void 0 ? void 0 : propAvatarGroup.maxColor)
    };
    useEffect(function() {
        var maxCount = groupMax || groupCount;
        if (avatarIndex === groupCount && avatarIndex !== maxCount && groupCount > maxCount) {
            setShowMax(true);
        }
    }, [
        avatarIndex,
        groupCount
    ]);
    var errorEvent = function() {
        onError && onError();
    };
    var clickAvatar = function(e) {
        onClick && onClick(e);
    };
    return /*#__PURE__*/ React.createElement(React.Fragment, null, (showMax || !groupMax || avatarIndex <= groupMax) && /*#__PURE__*/ React.createElement(View, {
        className: cls,
        style: !showMax ? styles : maxStyles,
        onClick: clickAvatar,
        ref: avatarRef
    }, (!groupMax || avatarIndex <= groupMax) && /*#__PURE__*/ React.createElement(React.Fragment, null, src && /*#__PURE__*/ React.createElement(Image, {
        className: "nut-avatar-img nut-avatar-".concat(groupSize || size || 'normal', "-img"),
        src: src,
        style: {
            objectFit: fit
        },
        mode: mode,
        onError: errorEvent
    }), /*#__PURE__*/ React.isValidElement(icon) ? /*#__PURE__*/ React.createElement(View, {
        className: "nut-avatar-text"
    }, /*#__PURE__*/ React.cloneElement(icon, _object_spread_props(_object_spread({}, icon.props), {
        color: color,
        className: "".concat(icon.props.className || '', " nut-avatar-icon nut-avatar-").concat(groupSize || size || 'normal', "-icon")
    }))) : null, children && /*#__PURE__*/ React.createElement(View, {
        style: {
            color: color
        },
        className: "nut-avatar-text nut-avatar-".concat(groupSize || size || 'normal', "-text")
    }, children), !src && !icon && !children && /*#__PURE__*/ React.createElement(View, {
        className: "nut-avatar-text"
    }, /*#__PURE__*/ React.createElement(User, {
        style: {
            color: color
        },
        className: "nut-avatar-icon nut-avatar-".concat(groupSize || size || 'normal', "-icon")
    }))), showMax && /*#__PURE__*/ React.createElement(View, {
        className: "nut-avatar-text nut-avatar-".concat(groupSize || 'normal', "-text"),
        style: _object_spread({}, maxStyles)
    }, (propAvatarGroup === null || propAvatarGroup === void 0 ? void 0 : propAvatarGroup.maxContent) ? propAvatarGroup === null || propAvatarGroup === void 0 ? void 0 : propAvatarGroup.maxContent : "+ ".concat(avatarIndex - Number(groupMax || 0)))));
};
Avatar.displayName = 'NutAvatar';
Avatar.Group = AvatarGroup;
