import { PisellBaseCardProps } from "../pisellBaseCard/types.js";
import { EntityCardLayout } from "../pisellEntityCard/types.js";
import React from "react";

//#region src/components/PisellContactBrief/types.d.ts
/**
 * 联系人表单值（新建/编辑弹窗提交结构）
 * 基础字段 name、phone、email + 扩展字段（与 extraFields[].key 对应）扁平在同一对象
 */
interface ContactFormValues {
  /** 姓名 */
  name: string;
  /** 电话 */
  phone?: string;
  /** 邮箱 */
  email?: string;
  /** 扩展字段及任意表单项，key 与 extraFields 配置对应 */
  [key: string]: string | undefined;
}
/**
 * 可增加字段配置项
 * 顺序即卡片展示与弹窗表单项顺序
 */
interface ContactBriefExtraField {
  /** 字段 key，与 extraData / ContactFormValues 对应 */
  key: string;
  /** 展示与表单项 label（可配合多语言） */
  label: string;
}
/**
 * PisellContactBrief 组件 Props
 * 基于 PisellEntityCard 展示联系人简要信息，内置编辑弹窗
 */
interface PisellContactBriefProps extends Pick<PisellBaseCardProps, 'className' | 'style' | 'hoverStyle' | 'activeStyle' | 'disabledStyle' | 'clickable' | 'disabled' | 'onClick'> {
  /** 联系人姓名（主文案） */
  name: string;
  /** 电话（副标题，与姓名同行） */
  phone?: string;
  /** 邮箱（次级文案） */
  email?: string;
  /** 头像图片地址，不传则显示默认占位 */
  avatar?: string;
  /** 扩展字段值，key 与 extraFields 配置对应 */
  extraData?: Record<string, string>;
  /** 可增加字段配置，顺序即展示与表单顺序 */
  extraFields?: ContactBriefExtraField[];
  /** 编辑弹窗提交回调 */
  onSubmit?: (values: ContactFormValues) => void;
  /** 左滑删除回调（透传 Entity Card） */
  onDelete?: () => void;
  /** 是否开启左滑删除 @default false */
  swipeToDelete?: boolean;
  /** 布局方向 @default 'horizontal' */
  layout?: EntityCardLayout;
  /** 是否显示头像 @default true */
  showAvatar?: boolean;
  /** 是否显示电话 @default true */
  showPhone?: boolean;
  /** 是否显示邮箱 @default true */
  showEmail?: boolean;
  /** 主文案行数限制 */
  primaryLineClamp?: number;
  /** 次级文案行数限制 */
  secondaryLineClamp?: number;
}
/**
 * PisellContactBrief.CreateButton 组件 Props
 * 点击后打开新建联系人弹窗
 */
interface PisellContactBriefCreateButtonProps extends Pick<PisellBaseCardProps, 'className' | 'style'> {
  /** 可增加字段配置，与卡片一致，弹窗内表单项与之对应 */
  extraFields?: ContactBriefExtraField[];
  /** 新建弹窗提交回调，调用方保存数据后可更新列表 */
  onCreate?: (values: ContactFormValues) => void;
  /** 自定义点击行为；不传则使用内置打开新建弹窗 */
  onClick?: (e: React.MouseEvent<HTMLDivElement>) => void;
}
/**
 * 复合组件类型：PisellContactBrief + CreateButton
 */
interface PisellContactBriefComponent {
  (props: PisellContactBriefProps): React.ReactElement;
  CreateButton: React.ComponentType<PisellContactBriefCreateButtonProps>;
}
//#endregion
export { ContactBriefExtraField, ContactFormValues, PisellContactBriefComponent, PisellContactBriefCreateButtonProps, PisellContactBriefProps };