import type { BasicWidgetInstance, BasicWidgetProps } from '../../utils'

export interface ToolBoxButtonHandleEvent {
    // 事件类型
    type: 'click' | 'change' | 'toggle'
    // 事件名称
    name: string
    // 事件值
    value?: string | string[] | { text: string; value: string } | { text: string; value: string }[]

    // 按钮本身
    button?: ToolBoxButton
}

export interface ToolBoxButton {
    // 按钮类型
    type: 'select' | 'button' | 'filter' | 'toggle'
    // 按钮名称
    name: string
    // 按钮图标
    icon?: string
    // 按钮文字颜色
    color?: string
    // 按钮是否禁用
    disabled?: boolean
    // select 类型按钮选项
    options?: {
        id?: string
        // 选项名称
        text: string
        // 选项值
        value: string
        // 是否选中
        checked?: boolean
        // 是否禁用
        disabled?: boolean
    }[]
    // select 类型下是否支持多选
    multiple?: boolean
    // 按钮事件
    handle?: (e: ToolBoxButtonHandleEvent) => void
    // 按钮值
    value?: string | string[]
    // filter 类型的结果
    result?: string | string[]
}

export interface ToolBoxButtonGroup {
    // 标识
    key: string
    // 对齐方向
    align?: 'top' | 'bottom'
    // 按钮列表
    buttons: ToolBoxButton[]
}

export interface ToolBoxProps extends BasicWidgetProps {
    /**
     * 是否展开
     * @default true
     */
    expand?: boolean
    /**
     * 是否显示是否展开按钮
     * @default true
     */
    showExpandButton?: boolean
    /**
     * 顶部距离 rpx
     * @default 0
     */
    top?: number
    /**
     * 底部距离 rpx
     * @default 0
     */
    bottom?: number
    /**
     * 底部内边距 rpx
     * @default 0
     */
    bottomPadding?: number
    /**
     * 工具集
     */
    tools?: ToolBoxButtonGroup[]
}

export interface ToolBoxInstance extends BasicWidgetInstance<ToolBoxProps> {
    /**
     * 展开或收起工具箱
     * @param expand 是否展开
     */
    toggleExpand: (expand?: boolean) => void
}
