import type { ElDialog, DialogProps as ElDialogProps, ButtonProps } from 'element-plus'
import type { MaybeRef } from 'vue'

type RawSlot = {
  [name: string]: unknown
  $stable?: boolean
}


export interface DialogModalProps extends Partial<ElDialogProps> {
 
  //弹窗标题
  title: string
  // 底部插槽
  footer?: boolean  | (() => VNode)

  //顶部插槽
  header?: boolean  | VNode | (() => VNode) | RawSlot

  //高度
  maxHeight?: string | number



  //是否显示滚动条
  scroll?: boolean

  // 确认按钮文本
  okText?: string

  // 取消按钮文本
  cancelText?: string

  // 是否显示确认按钮
  showOk?: boolean

  //是否显示取消按钮
  hideCancel?: boolean

  // 是否显示全屏按钮
  showFullscreen?: boolean

  // 是否在点击模态框时关闭
  closeOnClickModal?: boolean

  // 是否在按下 ESC 键时关闭
  closeOnPressEscape?: boolean

  // 是否显示关闭按钮
  showClose?: boolean

  // 是否显示模态框
  modal?: boolean

  // 是否显示遮罩层
  lockScroll?: boolean

  // 确认按钮的属性
  okButtonProps?: Partial<ButtonProps>

  // 取消按钮的属性
  cancelButtonProps?: Partial<ButtonProps>

  // 点击确认按钮时的回调
  onOk?: () => void

  // 点击确认按钮前的回调，返回 false 时阻止关闭
  onBeforeOk?: () => Promise<boolean>

  // 点击取消按钮时的回调
  onCancel?: () => void

  // 帮助信息
  helpMessage?: string

  // 自定义class
  customClass?: string
}


export interface DialogContentProps {
  [key: string]: any
}

export interface DialogProps  {
  modalProps?: DialogModalProps,
  contentProps?: DialogContentProps,
  content: string | Component | (() => Promise<Component>) | VNode | (() => VNode) | RawSlot
}