"use client";

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

/**
 * 카드 스타일 설정
 */
export interface CardStyleConfig {
  showTitle?: boolean;
  showSubtitle?: boolean;
  showDescription?: boolean;
  showImage?: boolean;
  maxDescriptionLength?: number;
  imagePosition?: "top" | "left" | "right";
  imageSize?: "small" | "medium" | "large";
  showActions?: boolean; // 액션 버튼 표시 여부 (전체)
  showViewButton?: boolean; // 상세보기 버튼 표시 여부
  showEditButton?: boolean; // 편집 버튼 표시 여부
  showDeleteButton?: boolean; // 삭제 버튼 표시 여부
}

/**
 * 컬럼 매핑 설정
 */
export interface ColumnMappingConfig {
  titleColumn?: string;
  subtitleColumn?: string;
  descriptionColumn?: string;
  imageColumn?: string;
  displayColumns?: string[];
  actionColumns?: string[]; // 액션 버튼으로 표시할 컬럼들
}

/**
 * CardDisplay 컴포넌트 설정 타입
 */
export interface CardDisplayConfig extends ComponentConfig {
  // 카드 레이아웃 설정
  cardsPerRow?: number;
  cardSpacing?: number;

  // 카드 스타일 설정
  cardStyle?: CardStyleConfig;

  // 컬럼 매핑 설정
  columnMapping?: ColumnMappingConfig;

  // 컴포넌트별 테이블 설정
  useCustomTable?: boolean;
  customTableName?: string;
  tableName?: string;
  isReadOnly?: boolean;

  // 테이블 데이터 설정
  dataSource?: "static" | "table" | "api";
  tableId?: string;
  staticData?: any[];

  // 공통 설정
  disabled?: boolean;
  required?: boolean;
  readonly?: boolean;
  helperText?: string;

  // 스타일 관련
  variant?: "default" | "outlined" | "filled";
  size?: "sm" | "md" | "lg";

  // 이벤트 관련
  onChange?: (value: any) => void;
  onCardClick?: (data: any) => void;
  onCardHover?: (data: any) => void;
}

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

  // 이벤트 핸들러
  onChange?: (value: any) => void;
  onFocus?: () => void;
  onBlur?: () => void;
  onClick?: () => void;
}
