/**
 * 렉 구조 컴포넌트 타입 정의
 */

// 렉 라인 조건 (열 범위 + 단 수)
export interface RackLineCondition {
  id: string;
  startRow: number;  // 시작 열
  endRow: number;    // 종료 열
  levels: number;    // 단 수
}

// 렉 구조 템플릿
export interface RackStructureTemplate {
  id: string;
  name: string;
  conditions: RackLineCondition[];
  createdAt?: string;
}

// 생성될 위치 데이터 (테이블 컬럼명과 동일하게 매핑)
export interface GeneratedLocation {
  row_num: string;           // 열 번호 (varchar)
  level_num: string;         // 단 번호 (varchar)
  location_code: string;     // 위치 코드 (예: WH001-1A-01-1)
  location_name: string;     // 위치명 (예: A구역-01열-1단)
  location_type?: string;    // 위치 유형
  status?: string;           // 사용 여부
  // 추가 필드 (상위 폼에서 매핑된 값)
  warehouse_code?: string;   // 창고 코드 (DB 컬럼명과 동일)
  warehouse_name?: string;   // 창고명
  floor?: string;            // 층
  zone?: string;             // 구역
}

// 필드 매핑 설정 (상위 폼의 어떤 필드를 사용할지)
export interface FieldMapping {
  warehouseCodeField?: string;   // 창고 코드로 사용할 폼 필드명
  warehouseNameField?: string;   // 창고명으로 사용할 폼 필드명
  floorField?: string;           // 층으로 사용할 폼 필드명
  zoneField?: string;            // 구역으로 사용할 폼 필드명
  locationTypeField?: string;    // 위치 유형으로 사용할 폼 필드명
  statusField?: string;          // 사용 여부로 사용할 폼 필드명
}

// 컴포넌트 설정
export interface RackStructureComponentConfig {
  // 기본 설정
  maxConditions?: number;        // 최대 조건 수 (기본: 10)
  maxRows?: number;              // 최대 열 수 (기본: 99)
  maxLevels?: number;            // 최대 단 수 (기본: 20)
  
  // 필드 매핑 (상위 폼의 필드와 연결)
  fieldMapping?: FieldMapping;
  
  // 위치 코드 생성 규칙
  codePattern?: string;          // 코드 패턴 (예: "{warehouse}-{floor}{zone}-{row:02d}-{level}")
  namePattern?: string;          // 이름 패턴 (예: "{zone}구역-{row:02d}열-{level}단")
  
  // UI 설정
  showTemplates?: boolean;       // 템플릿 기능 표시
  showPreview?: boolean;         // 미리보기 표시
  showStatistics?: boolean;      // 통계 카드 표시
  readonly?: boolean;            // 읽기 전용
  
  // 초기값
  initialConditions?: RackLineCondition[];
}

// 상위 폼에서 전달받는 컨텍스트 데이터
export interface RackStructureContext {
  warehouseId?: string;          // 창고 ID
  warehouseCode?: string;        // 창고 코드 (예: WH001)
  warehouseName?: string;        // 창고명 (예: 제1창고)
  floor?: string;                // 층 라벨 (예: 1층) - 화면 표시용
  zone?: string;                 // 구역 라벨 (예: A구역) - 화면 표시용
  locationType?: string;         // 위치 유형 라벨 (예: 선반)
  status?: string;               // 사용 여부 라벨 (예: 사용)
  // 카테고리 코드 (DB 저장/쿼리용)
  floorCode?: string;            // 층 카테고리 코드 (예: CATEGORY_767659DCUF)
  zoneCode?: string;             // 구역 카테고리 코드 (예: CATEGORY_82925656Q8)
  locationTypeCode?: string;     // 위치 유형 카테고리 코드
  statusCode?: string;           // 사용 여부 카테고리 코드
}

// 컴포넌트 Props
export interface RackStructureComponentProps {
  config: RackStructureComponentConfig;
  context?: RackStructureContext;
  formData?: Record<string, any>;  // 상위 폼 데이터 (필드 매핑에 사용)
  onChange?: (locations: GeneratedLocation[]) => void;
  onConditionsChange?: (conditions: RackLineCondition[]) => void;
  isPreview?: boolean;
  tableName?: string;
}


