"use client";

import { createComponentDefinition } from "../../utils/createComponentDefinition";
import { ComponentCategory } from "@/types/component";
import { UniversalFormModalComponent } from "./UniversalFormModalComponent";
import { UniversalFormModalConfigPanel } from "./UniversalFormModalConfigPanel";
import { defaultConfig } from "./config";

/**
 * 범용 폼 모달 컴포넌트 정의
 *
 * 섹션 기반 폼 레이아웃, 채번규칙을 지원하는
 * 범용 모달 컴포넌트입니다.
 */
export const UniversalFormModalDefinition = createComponentDefinition({
  id: "universal-form-modal",
  name: "범용 폼 모달",
  nameEng: "Universal Form Modal",
  description: "섹션 기반 폼 레이아웃, 채번규칙을 지원하는 범용 모달 컴포넌트",
  category: ComponentCategory.INPUT,
  webType: "form",
  component: UniversalFormModalComponent,
  defaultConfig: defaultConfig,
  defaultSize: {
    width: 800,
    height: 600,
    gridColumnSpan: "12",
  },
  configPanel: UniversalFormModalConfigPanel,
  icon: "FormInput",
  tags: ["폼", "모달", "입력", "저장", "채번"],
  version: "1.0.0",
  author: "개발팀",
  documentation: `
## 범용 폼 모달 컴포넌트

### 주요 기능
- **섹션 기반 레이아웃**: 기본 정보, 추가 정보 등 섹션별로 폼 구성
- **반복 섹션**: 동일한 필드 그룹을 여러 개 추가 가능
- **채번규칙 연동**: 자동 코드 생성 (모달 열릴 때 또는 저장 시점)
- **단일/다중 테이블 저장**: 단일 테이블 또는 메인+서브 테이블에 저장
- **외부 데이터 수신**: 부모 화면에서 전달받은 값 자동 채움

### 사용 예시
1. 사원 등록, 부서 등록, 거래처 등록 (단일 테이블)
2. 주문 등록 + 주문 상세 (다중 테이블)
3. 품목 등록 + 규격 옵션 추가

### 설정 방법
1. 저장 테이블 선택
2. 섹션 추가 (기본 정보 등)
3. 각 섹션에 필드 추가
4. 반복 섹션 설정 (필요 시)
5. 다중 테이블 저장 설정 (필요 시)
6. 채번규칙 연동 (필요 시)
  `,
});

// 컴포넌트 내보내기
export { UniversalFormModalComponent } from "./UniversalFormModalComponent";
export { UniversalFormModalConfigPanel } from "./UniversalFormModalConfigPanel";
export { defaultConfig } from "./config";

// 타입 내보내기
export type {
  UniversalFormModalConfig,
  UniversalFormModalComponentProps,
  UniversalFormModalConfigPanelProps,
  FormSectionConfig,
  FormFieldConfig,
  SaveConfig,
  NumberingRuleConfig,
  SelectOptionConfig,
  FormDataState,
  RepeatSectionItem,
} from "./types";
