/**
 * EntitySearchInput 컴포넌트 타입 정의
 * 엔티티 테이블에서 데이터를 검색하고 선택하는 입력 컴포넌트
 */

export interface EntitySearchInputProps {
  // 데이터 소스
  tableName: string; // 검색할 테이블명 (예: "customer_mng")
  displayField: string; // 표시할 필드 (예: "customer_name")
  valueField: string; // 값으로 사용할 필드 (예: "customer_code")
  searchFields?: string[]; // 검색 대상 필드들 (기본: [displayField])

  // UI 모드
  // - select: 드롭다운 선택 (검색 가능한 콤보박스)
  // - modal: 모달 팝업에서 선택
  // - combo: 입력 + 모달 버튼 (기본)
  // - autocomplete: 입력하면서 자동완성
  mode?: "select" | "autocomplete" | "modal" | "combo"; // 기본: "combo"
  placeholder?: string;
  disabled?: boolean;

  // 다중선택
  multiple?: boolean; // 여러 항목 선택 가능 여부 (기본: false)

  // 필터링
  filterCondition?: Record<string, any>; // 추가 WHERE 조건
  companyCode?: string; // 멀티테넌시

  // 연쇄관계 설정
  cascadingRelationCode?: string; // 연쇄관계 코드 (cascading_relation 테이블)
  cascadingRole?: "parent" | "child"; // 역할 (부모/자식)
  parentFieldId?: string; // 부모 필드의 컬럼명 (자식 역할일 때, formData에서 값 추출용)
  parentValue?: any; // 부모 필드의 현재 값 (직접 전달)
  formData?: Record<string, any>; // 전체 폼 데이터 (부모 값 추출용)

  // 선택된 값
  value?: any;
  onChange?: (value: any, fullData?: any) => void;

  // 모달 설정 (mode가 "modal" 또는 "combo"일 때)
  modalTitle?: string;
  modalColumns?: string[]; // 모달에 표시할 컬럼들

  // 추가 표시 정보
  showAdditionalInfo?: boolean; // 선택 후 추가 정보 표시 (예: 주소)
  additionalFields?: string[]; // 추가로 표시할 필드들

  // 스타일
  className?: string;
  style?: React.CSSProperties;
}

export interface EntitySearchResult {
  [key: string]: any;
}

export interface EntitySearchResponse {
  success: boolean;
  data: EntitySearchResult[];
  pagination?: {
    total: number;
    page: number;
    limit: number;
  };
  error?: string;
}

