/**
 * 품목별 라우팅 관리 컴포넌트 타입 정의
 *
 * 3단계 계층: item_info → item_routing_version → item_routing_detail
 */

// 데이터 소스 설정
export interface ItemRoutingDataSource {
  itemTable: string;
  itemNameColumn: string;
  itemCodeColumn: string;
  routingVersionTable: string;
  routingVersionFkColumn: string;
  routingVersionNameColumn: string;
  routingDetailTable: string;
  routingDetailFkColumn: string;
  processTable: string;
  processNameColumn: string;
  processCodeColumn: string;
}

// 모달 연동 설정
export interface ItemRoutingModals {
  versionAddScreenId?: number;
  processAddScreenId?: number;
  processEditScreenId?: number;
}

// 컬럼 정의 (공정/품목 공용)
export interface ColumnDef {
  name: string;
  label: string;
  width?: number;
  align?: "left" | "center" | "right";
}

// 공정 테이블 컬럼 정의 (기존 호환)
export type ProcessColumnDef = ColumnDef;

// 품목 필터 조건
export interface ItemFilterCondition {
  column: string;
  operator: "equals" | "contains" | "not_equals";
  value: string;
}

// 전체 Config
export interface ItemRoutingConfig {
  dataSource: ItemRoutingDataSource;
  modals: ItemRoutingModals;
  processColumns: ProcessColumnDef[];
  splitRatio?: number;
  leftPanelTitle?: string;
  rightPanelTitle?: string;
  readonly?: boolean;
  autoSelectFirstVersion?: boolean;
  versionAddButtonText?: string;
  processAddButtonText?: string;
  itemListMode?: "all" | "registered";
  screenCode?: string;
  /** 좌측 품목 목록에 표시할 컬럼 */
  itemDisplayColumns?: ColumnDef[];
  /** 품목 추가 모달에 표시할 컬럼 */
  modalDisplayColumns?: ColumnDef[];
  /** 품목 조회 시 사전 필터 조건 */
  itemFilterConditions?: ItemFilterCondition[];
  /** 품목 추가 모달 최대 너비 (px 또는 vw, 기본: 600px) */
  addModalMaxWidth?: string;
  /** 품목 추가 모달 목록 최대 높이 (px, 기본: 340px) */
  addModalListMaxHeight?: string;
}

// 컴포넌트 Props
export interface ItemRoutingComponentProps {
  config: Partial<ItemRoutingConfig>;
  formData?: Record<string, any>;
  isPreview?: boolean;
  tableName?: string;
  screenId?: number | string;
}

// 데이터 모델
export interface ItemData {
  id: string;
  [key: string]: any;
}

export interface RoutingVersionData {
  id: string;
  version_name: string;
  is_default?: boolean;
  [key: string]: any;
}

export interface RoutingDetailData {
  id: string;
  routing_version_id: string;
  seq_no: string;
  process_code: string;
  [key: string]: any;
}
