export interface TabItem {
  name: string | number;
  title: string;
  disabled?: boolean;
  closable?: boolean;
  lazy?: boolean;
}

export interface TabsProps {
  /** 当前激活的标签页名称 */
  modelValue?: string | number;
  /** 标签页类型 */
  type?: "bar" | "line" | "segment";
  /** 标签页尺寸 */
  size?: "small" | "medium" | "large";
  /** 是否开启切换动画 */
  animated?: boolean;
  /** 是否可关闭 */
  closable?: boolean;
  /** 是否可添加 */
  addable?: boolean;
  /** 标签页位置 */
  placement?: "top" | "bottom" | "left" | "right";
  /** 标签样式 */
  tabStyle?: string | Record<string, any>;
  /** 标签类名 */
  tabClass?: string;
  /** 面板样式 */
  paneStyle?: string | Record<string, any>;
  /** 面板类名 */
  paneClass?: string;
}

export interface TabsEmits {
  /** 当前激活标签页发生变化时触发 */
  (e: "update:modelValue", value: string | number): void;
  /** 点击标签时触发 */
  (e: "tabClick", key: string | number, event: Event): void;
  /** 关闭标签时触发 */
  (e: "tabClose", key: string | number): void;
  /** 添加标签时触发 */
  (e: "tabAdd"): void;
}

export interface TabPaneProps {
  /** 标签页标识，必须唯一 */
  name: string | number;
  /** 标签页标题 */
  title: string;
  /** 是否禁用 */
  disabled?: boolean;
  /** 是否可关闭 */
  closable?: boolean;
  /** 是否懒加载 */
  lazy?: boolean;
}

export interface TabsContext {
  /** 当前激活的标签页 */
  currentTab: Readonly<Ref<string | number | undefined>>;
  /** 标签页类型 */
  type: Readonly<Ref<"bar" | "line" | "segment">>;
  /** 标签页尺寸 */
  size: Readonly<Ref<"small" | "medium" | "large">>;
  /** 是否可关闭 */
  closable: Readonly<Ref<boolean>>;
  /** 是否开启动画 */
  animated: Readonly<Ref<boolean>>;
  /** 标签页位置 */
  placement: Readonly<Ref<"top" | "bottom" | "left" | "right">>;
  /** 标签样式 */
  tabStyle: Readonly<Ref<string | Record<string, any> | undefined>>;
  /** 标签类名 */
  tabClass: Readonly<Ref<string | undefined>>;
  /** 面板样式 */
  paneStyle: Readonly<Ref<string | Record<string, any> | undefined>>;
  /** 面板类名 */
  paneClass: Readonly<Ref<string | undefined>>;
  /** 激活标签页方法 */
  activateTab: (key: string | number, event?: Event) => void;
  /** 关闭标签页方法 */
  closeTab: (key: string | number) => void;
  /** 注册标签页 */
  registerTabPane: (pane: TabItem) => void;
  /** 注销标签页 */
  unregisterTabPane: (pane: TabItem) => void;
}

/** Tabs 组件实例类型 */
export interface TabsInstance {
  /** 注册标签页 */
  registerTabPane: (pane: TabItem) => void;
  /** 注销标签页 */
  unregisterTabPane: (pane: TabItem) => void;
  /** 更新活跃指示条位置 */
  updateActiveBar: () => void;
}
