/**
 * RelatedDataButtons 컴포넌트 타입 정의
 * 
 * 좌측 패널에서 선택한 데이터의 정보를 표시하고,
 * 연관 테이블의 데이터를 버튼으로 표시하는 컴포넌트
 * 
 * 예시: 품목 선택 → 품목명/코드 표시 + 라우팅 버전 버튼들
 */

/**
 * 헤더 표시 설정 (선택된 마스터 데이터 정보)
 */
export interface HeaderDisplayConfig {
  show?: boolean; // 헤더 표시 여부
  titleColumn: string; // 제목으로 표시할 컬럼 (예: item_name)
  subtitleColumn?: string; // 부제목으로 표시할 컬럼 (예: item_code)
}

/**
 * 버튼 데이터 소스 설정
 */
export interface ButtonDataSourceConfig {
  tableName: string; // 조회할 테이블명 (예: item_routing_version)
  filterColumn: string; // 필터링할 컬럼명 (예: item_code)
  displayColumn: string; // 버튼에 표시할 컬럼명 (예: version_name)
  valueColumn?: string; // 선택 시 전달할 값 컬럼 (기본: id)
  orderColumn?: string; // 정렬 컬럼
  orderDirection?: "ASC" | "DESC"; // 정렬 방향
}

/**
 * 버튼 스타일 설정
 */
export interface ButtonStyleConfig {
  variant?: "default" | "outline" | "secondary" | "ghost";
  activeVariant?: "default" | "outline" | "secondary";
  size?: "sm" | "default" | "lg";
  // 기본 버전 표시 설정
  defaultIndicator?: {
    column: string; // 기본 여부 판단 컬럼 (예: is_default)
    value?: string; // 기본 값 (기본: "Y" 또는 true)
    showStar?: boolean; // 별표 아이콘 표시
    badgeText?: string; // 뱃지 텍스트 (예: "기본")
  };
}

/**
 * 추가 버튼 설정
 */
export interface AddButtonConfig {
  show?: boolean;
  label?: string; // 기본: "+ 버전 추가"
  modalScreenId?: number;
  position?: "header" | "inline"; // header: 헤더 우측, inline: 버튼들과 함께
}

/**
 * 이벤트 설정 (하위 테이블 연동)
 */
export interface EventConfig {
  // 선택 시 하위 테이블 필터링
  targetTable?: string; // 필터링할 테이블명 (예: item_routing_detail)
  targetFilterColumn?: string; // 필터 컬럼명 (예: routing_version_id)
  // 커스텀 이벤트
  customEventName?: string;
}

/**
 * 모달 연동 설정 (선택된 버튼 데이터를 모달로 전달)
 */
export interface ModalLinkConfig {
  enabled?: boolean; // 모달 연동 활성화
  targetScreenId?: number; // 열릴 모달 화면 ID
  triggerType?: "button" | "external"; // button: 별도 버튼, external: 외부 버튼에서 호출
  buttonLabel?: string; // 버튼 텍스트 (triggerType이 button일 때)
  buttonPosition?: "header" | "inline"; // 버튼 위치
  // 데이터 매핑: 선택된 버튼 데이터 → 모달 초기값
  dataMapping?: {
    sourceField: string; // 버튼 데이터의 필드명 (예: "id", "value")
    targetField: string; // 모달에 전달할 필드명 (예: "routing_version_id")
  }[];
}

/**
 * 메인 설정
 */
export interface RelatedDataButtonsConfig {
  // 소스 매핑 (좌측 패널 연결)
  sourceMapping: {
    sourceTable: string; // 좌측 패널 테이블명
    sourceColumn: string; // 필터에 사용할 컬럼 (예: item_code)
  };
  
  // 헤더 표시 설정
  headerDisplay?: HeaderDisplayConfig;
  
  // 버튼 데이터 소스
  buttonDataSource: ButtonDataSourceConfig;
  
  // 버튼 스타일
  buttonStyle?: ButtonStyleConfig;
  
  // 추가 버튼
  addButton?: AddButtonConfig;
  
  // 이벤트 설정
  events?: EventConfig;
  
  // 모달 연동 설정 (선택된 버튼 데이터를 모달로 전달)
  modalLink?: ModalLinkConfig;
  
  // 자동 선택
  autoSelectFirst?: boolean; // 첫 번째 (또는 기본) 항목 자동 선택
  
  // 빈 상태 메시지
  emptyMessage?: string;
}

/**
 * 버튼 아이템 데이터
 */
export interface ButtonItem {
  id: string;
  displayText: string;
  value: string;
  isDefault: boolean;
  rawData: Record<string, any>;
}
