# 렉 구조 설정 컴포넌트 (Rack Structure Config)

창고 렉 위치를 열 범위와 단 수로 일괄 생성하는 컴포넌트입니다.

## 핵심 개념

이 컴포넌트는 **상위 폼의 필드 값을 읽어서** 위치 코드를 생성합니다.

### 작동 방식

1. 사용자가 화면관리에서 테이블 컬럼(창고코드, 층, 구역 등)을 드래그하여 폼에 배치
2. 렉 구조 컴포넌트 설정에서 **필드 매핑** 설정 (어떤 폼 필드가 창고/층/구역인지)
3. 런타임에 사용자가 폼 필드에 값을 입력하면, 렉 구조 컴포넌트가 해당 값을 읽어서 사용

## 기능

### 1. 렉 라인 구조 설정

- 조건 추가/삭제
- 각 조건: 열 범위(시작~종료) + 단 수
- 자동 위치 수 계산 (예: 1열~3열 x 3단 = 9개)
- 템플릿 저장/불러오기

### 2. 등록 미리보기

- 통계 카드 (총 위치, 열 수, 최대 단)
- 미리보기 생성 버튼
- 생성될 위치 목록 테이블

## 설정 방법

### 1. 화면관리에서 배치

1. 상위에 테이블 컬럼들을 배치 (창고코드, 층, 구역, 위치유형, 사용여부)
2. 컴포넌트 팔레트에서 "렉 구조 설정" 선택
3. 캔버스에 드래그하여 배치

### 2. 필드 매핑 설정

설정 패널에서 상위 폼의 어떤 필드를 사용할지 매핑합니다:

| 매핑 항목      | 설명                                  |
| -------------- | ------------------------------------- |
| 창고 코드 필드 | 위치 코드 생성에 사용할 창고 코드     |
| 층 필드        | 위치 코드 생성에 사용할 층            |
| 구역 필드      | 위치 코드 생성에 사용할 구역          |
| 위치 유형 필드 | 미리보기 테이블에 표시할 위치 유형    |
| 사용 여부 필드 | 미리보기 테이블에 표시할 사용 여부    |

### 예시

상위 폼에 다음 필드가 배치되어 있다면:
- `창고코드(조인)` → 필드명: `warehouse_code`
- `층` → 필드명: `floor`
- `구역` → 필드명: `zone`

설정 패널에서:
- 창고 코드 필드: `warehouse_code` 선택
- 층 필드: `floor` 선택
- 구역 필드: `zone` 선택

## 위치 코드 생성 규칙

기본 패턴: `{창고코드}-{층}{구역}-{열:2자리}-{단}`

예시 (창고: WH001, 층: 1, 구역: A):

- WH001-1A-01-1 (01열, 1단)
- WH001-1A-01-2 (01열, 2단)
- WH001-1A-02-1 (02열, 1단)

## 설정 옵션

| 옵션           | 타입    | 기본값 | 설명             |
| -------------- | ------- | ------ | ---------------- |
| maxConditions  | number  | 10     | 최대 조건 수     |
| maxRows        | number  | 99     | 최대 열 수       |
| maxLevels      | number  | 20     | 최대 단 수       |
| showTemplates  | boolean | true   | 템플릿 기능 표시 |
| showPreview    | boolean | true   | 미리보기 표시    |
| showStatistics | boolean | true   | 통계 카드 표시   |
| readonly       | boolean | false  | 읽기 전용        |

## 출력 데이터

`onChange` 콜백으로 생성된 위치 데이터 배열을 반환합니다:

```typescript
interface GeneratedLocation {
  rowNum: number;          // 열 번호
  levelNum: number;        // 단 번호
  locationCode: string;    // 위치 코드
  locationName: string;    // 위치명
  locationType?: string;   // 위치 유형
  status?: string;         // 사용 여부
  warehouseCode?: string;  // 창고 코드 (매핑된 값)
  floor?: string;          // 층 (매핑된 값)
  zone?: string;           // 구역 (매핑된 값)
}
```

## 연동 테이블

`warehouse_location` 테이블과 연동됩니다:

| 컬럼          | 설명      |
| ------------- | --------- |
| warehouse_id  | 창고 ID   |
| floor         | 층        |
| zone          | 구역      |
| row_num       | 열 번호   |
| level_num     | 단 번호   |
| location_code | 위치 코드 |
| location_name | 위치명    |
| location_type | 위치 유형 |
| status        | 사용 여부 |

## 예시 시나리오

### 시나리오: A구역에 1~3열은 3단, 4~6열은 5단 렉 생성

1. **상위 폼에서 기본 정보 입력**
   - 창고: 제1창고 (WH001) - 드래그해서 배치한 필드
   - 층: 1 - 드래그해서 배치한 필드
   - 구역: A - 드래그해서 배치한 필드
   - 위치 유형: 선반 - 드래그해서 배치한 필드
   - 사용 여부: 사용 - 드래그해서 배치한 필드

2. **렉 구조 컴포넌트에서 조건 추가**
   - 조건 1: 1~3열, 3단 → 9개
   - 조건 2: 4~6열, 5단 → 15개

3. **미리보기 생성**
   - 총 위치: 24개
   - 열 수: 6개
   - 최대 단: 5단

4. **저장**
   - 24개의 위치 데이터가 warehouse_location 테이블에 저장됨

## 필수 필드 검증

미리보기 생성 시 다음 필드가 입력되어 있어야 합니다:
- 창고 코드
- 층
- 구역

필드가 비어있으면 경고 메시지가 표시됩니다.
