import type React from 'react'
import type { StyleProp, ViewStyle, TextStyle, ColorValue } from 'react-native'

export interface CollapseProps {
  /**
   * 标题
   */
  title?: React.ReactNode

  /**
   * 标题样式
   */
  titleStyle?: StyleProp<ViewStyle>

  /**
   * 标题文案样式
   */
  titleTextStyle?: StyleProp<TextStyle>

  /**
   * 标题图标样式
   */
  iconStyle?: StyleProp<ViewStyle>

  /**
   * 标题图标颜色
   * @default collapse_title_icon_color
   */
  iconColor?: ColorValue

  /**
   * 标题图标大小
   * @default collapse_title_icon_size
   */
  iconSize?: number

  /**
   * 子元素/内容布局样式
   */
  bodyStyle?: StyleProp<ViewStyle>

  /**
   * 自定义渲染标题
   */
  renderTitle?: (collapse: boolean) => React.ReactNode

  /**
   * 自定义渲染标题右侧
   */
  renderTitleExtra?: (
    collapse: boolean,
    arrowJSX: React.ReactNode,
  ) => React.ReactNode

  /**
   * 自定义渲染内容，替换 children
   */
  renderBody?: () => React.ReactNode

  /**
   * 是否展开
   */
  collapse?: boolean

  /**
   * 默认状态是否展开
   */
  defaultCollapse?: boolean

  /**
   * 状态改变的回调
   */
  onCollapse?: (collapse: boolean) => void

  /**
   * 样式、场景
   * @default 'cell'
   */
  type?: 'cell' | 'card'

  /**
   * 动画结束的回调，注意组件渲染问题，会存在多次回调
   */
  onAnimationEnd?: (collapse: boolean) => void

  /**
   * 内容区域是否有内边距
   * @default true
   */
  bodyPadding?: boolean

  /**
   * 头部区域是否有分割线
   * @default true
   */
  headerDivider?: boolean

  /**
   * 内容区域是否有分割线，cell 默认 true，card 默认false
   */
  bodyDivider?: boolean

  /**
   * 是否在展开的时候才渲染子元素
   * @default true
   */
  lazyRender?: boolean
}
