import { Image, View } from '@tarojs/components'
import classnames from 'classnames'
import { useEffect, useState } from 'react'
import style from './index.module.scss'
import { usePropsValue } from '@/use/useCommon'

interface PropsType {
  showOverLay?: boolean
  show: boolean
  onClose?: (show: boolean) => void
  onChange?: (isShow) => void
  children?: React.ReactNode
  zIndex?: number
}
// 弹出框
const Dialog = (props: PropsType) => {
  const { showOverLay = true, zIndex = 99, show = false, onClose: _onClose, onChange: _onChange, children } = props

  const [_show, setShow] = usePropsValue({
    value: show,
    defaultValue: false,
    onChange: (value) => {
      _onChange?.(value)
    },
  })

  const [animShow, setAnimShow] = useState(false)

  const handleAnimShow = () => {
    setShow(true)
    setTimeout(() => {
      setAnimShow(true)
    }, 200)
  }
  const handleAnimHide = () => {
    setAnimShow(false)
    setTimeout(() => {
      setShow(false)
    }, 200)
  }
  const onClose = () => {
    handleAnimHide()
    _onClose?.(_show)
  }
  useEffect(() => {
    if (show) {
      handleAnimShow()
    }
  }, [show])
  return _show
    ? <View className={style.dialog} style={{ zIndex }}>
      {/* 遮罩层 start */}
      <View
        style={{ zIndex: zIndex + 1 }}
        className={classnames(style.dialog_mask, { [style.dialog_mask_active]: animShow, [style['drawer_mask--hidden']]: !showOverLay })}
        onClick={onClose}
      ></View>
      {/* 遮罩层 end */}
      <View
        style={{ zIndex: zIndex + 2 }}
        className={classnames(style.dialog_content, { [style.dialog_content_active]: animShow })}
      >
        {children}
      </View>
    </View>
    : <View></View>
}
export default Dialog
