"use client";

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

/**
 * Accordion 아이템 타입
 */
export interface AccordionItem {
  id: string;
  title: string;
  content: string;
  defaultOpen?: boolean;
}

/**
 * 내용 필드 구성 타입
 */
export interface ContentFieldConfig {
  fieldName: string; // 필드명
  label?: string; // 표시할 라벨 (선택사항)
  separator?: string; // 구분자 (기본값: 줄바꿈)
}

/**
 * 데이터 소스 설정 타입
 */
export interface DataSourceConfig {
  sourceType: "static" | "table" | "api"; // 데이터 소스 타입
  useScreenTable?: boolean; // 화면 테이블 사용 여부 (table 타입일 때)
  tableName?: string; // 직접 입력한 테이블명 (useScreenTable이 false일 때)
  apiEndpoint?: string; // API 엔드포인트 (api 타입일 때)
  titleField?: string; // 제목으로 사용할 필드명
  contentFields?: ContentFieldConfig[]; // 내용으로 사용할 필드들 (여러개 가능)
  idField?: string; // ID로 사용할 필드명
  filters?: Record<string, any>; // 필터 조건
  orderBy?: string; // 정렬 기준
  limit?: number; // ⚠️ 더 이상 사용되지 않음. 모든 데이터가 표시되고 스크롤로 처리됨
}

/**
 * Accordion 컴포넌트 설정 타입
 */
export interface AccordionBasicConfig extends ComponentConfig {
  // 데이터 소스 설정
  dataSource?: DataSourceConfig;

  // 정적 아코디언 아이템들 (기존 방식)
  items?: AccordionItem[];

  // 동작 설정
  type?: "single" | "multiple"; // 단일 선택 또는 다중 선택
  collapsible?: boolean; // 모든 아이템을 닫을 수 있는지
  defaultValue?: string; // 기본으로 열려있을 아이템 ID

  // 스타일 설정
  variant?: "default" | "bordered" | "ghost";
  size?: "sm" | "md" | "lg";

  // 애니메이션 설정
  animationDuration?: number; // ms 단위

  // 공통 설정
  disabled?: boolean;

  // 이벤트 관련
  onValueChange?: (value: string | string[]) => void;
}

/**
 * Accordion 컴포넌트 Props 타입
 */
export interface AccordionBasicProps {
  id?: string;
  name?: string;
  value?: any;
  config?: AccordionBasicConfig;
  className?: string;
  style?: React.CSSProperties;

  // 이벤트 핸들러
  onValueChange?: (value: string | string[]) => void;
}
