"use client";

import { ComponentConfig } from "@/types/component";

/**
 * Container 컴포넌트 통합 설정 타입
 *
 * 11개의 레이아웃/컨테이너 계열 컴포넌트를 통합.
 * containerType 으로 탭/섹션/아코디언/반복/조건부 분기.
 *
 * 흡수 대상 (11):
 *   - v2-tabs-widget (탭)
 *   - v2-section-card / v2-section-paper (섹션)
 *   - v2-repeat-container / v2-repeater (반복)
 *   - accordion-basic (아코디언)
 *   - section-card / section-paper (legacy)
 *   - tabs (legacy)
 *   - conditional-container (조건부)
 *   - repeat-container / repeat-screen-modal / repeater-field-group (legacy)
 *   - screen-split-panel (legacy)
 */

export type ContainerType =
  | "tabs"
  | "section"
  | "accordion"
  | "repeater"
  | "conditional";

export type SectionVariant = "card" | "paper" | "plain";

/**
 * 탭 / 컨테이너 내부에 배치되는 단일 자식 컴포넌트 디스크립터.
 *
 * Phase G.2 (Tabbed Data View) 에서 탭마다 다른 child 를 렌더하기 위한
 * 최소 shape. `DynamicComponentRenderer` 가 받는 `componentType / componentConfig`
 * 형식과 1:1 매칭. 빌더가 캔버스에서 컴포넌트를 추가하면 이 모양으로 저장된다.
 *
 * 의도적으로 `TemplateComponent` 전체보다 작게 유지 — order / row / responsive /
 * parentId 등은 빌더의 자유 배치 layout 영역이며 탭 child 렌더에는 불필요.
 */
export interface ContainerChildComponent {
  id: string;
  /** ComponentRegistry ID — 예: "table", "stats", "search", "button", "input" */
  componentType: string;
  /** 컴포넌트별 설정. 로우코드 원칙상 느슨한 Record */
  componentConfig?: Record<string, any>;
  /** 빌더에서 표시되는 라벨 (선택) */
  label?: string;
  /** 탭 내부 자유 배치용 (선택) — runtime 은 무시 가능 */
  size?: { width?: number | string; height?: number | string };
}

export interface ContainerTab {
  id: string;
  label: string;
  /** 탭 헤더 좌측 아이콘 (lucide 이름 또는 이모지, 선택) */
  icon?: string;
  /**
   * 이 탭이 활성화되었을 때 렌더할 자식 컴포넌트들 (Phase G.2).
   * 비어 있으면 디자인 모드에서 drop-zone fallback, 운영 모드에서 빈 영역.
   */
  components?: ContainerChildComponent[];
  /**
   * 탭 별 데이터 소스 / 필터 / view type (Phase G.2 forward compat).
   * runtime 은 현재 무시. 빌더 / 차후 phase 에서 의미 부여.
   */
  dataSources?: unknown[];
  filters?: unknown[];
  viewType?: string;
}

export interface ContainerConfig extends ComponentConfig {
  /** 컨테이너 종류 */
  containerType?: ContainerType;
  /** 제목 */
  title?: string;

  // ─── tabs 전용 ───
  /** 탭 목록 */
  tabs?: ContainerTab[];
  /** 기본 선택 탭 */
  defaultTab?: string;

  // ─── section 전용 ───
  /** 섹션 스타일 */
  sectionVariant?: SectionVariant;
  /** 접기 가능 */
  collapsible?: boolean;
  /** 기본 접힌 상태 */
  defaultCollapsed?: boolean;

  // ─── accordion 전용 ───
  /** 동시에 여러 항목 펼침 허용 */
  multiple?: boolean;

  // ─── repeater 전용 ───
  /** 최소 행 수 */
  minRows?: number;
  /** 최대 행 수 */
  maxRows?: number;
  /** 행 추가 버튼 텍스트 */
  addRowText?: string;

  // ─── conditional 전용 ───
  /** 표시 조건 필드 */
  conditionField?: string;
  /** 조건 연산자 */
  conditionOperator?: "=" | "!=" | ">" | "<" | "contains";
  /** 조건 값 */
  conditionValue?: string;

  // ─── 공통 ───
  /** 패딩 (CSS) */
  padding?: string;
  /** 배경 투명 여부 */
  transparent?: boolean;
}
