// ===== pop-string-list 전용 타입 =====
// pop-card-list와 완전 독립. 공유하는 것은 CardListDataSource 타입만 import.

import type { CardListDataSource } from "../types";
import type { ButtonMainAction, ButtonVariant, ConfirmConfig } from "../pop-button";

/** 표시 모드 */
export type StringListDisplayMode = "list" | "card";

/** 행 클릭 동작 */
export type RowClickAction = "none" | "publish" | "select-and-close-modal";

/** 카드 내부 셀 1개 정의 */
export interface CardCellDefinition {
  id: string;
  row: number; // 1부터
  col: number; // 1부터
  rowSpan: number; // 행 병합 (기본 1)
  colSpan: number; // 열 병합 (기본 1)
  columnName: string; // 바인딩할 DB 컬럼명
  label?: string; // 셀 위에 표시할 라벨 (선택)
  labelPosition?: "top" | "left"; // 라벨 위치 (기본 top)
  type: "text" | "image" | "badge" | "button"; // 셀 렌더링 타입
  fontSize?: "sm" | "md" | "lg"; // 글자 크기: 작게(10px) / 보통(12px) / 크게(14px)
  align?: "left" | "center" | "right"; // 가로 정렬 (기본 left)
  verticalAlign?: "top" | "middle" | "bottom"; // 세로 정렬 (기본 top)
  // button 타입 전용 (pop-button 로직 재사용)
  buttonAction?: ButtonMainAction; // 클릭 시 실행할 액션
  buttonVariant?: ButtonVariant; // 버튼 스타일
  buttonConfirm?: ConfirmConfig; // 확인 다이얼로그 설정
}

/** 카드 그리드 레이아웃 설정 */
export interface CardGridConfig {
  rows: number; // 행 수
  cols: number; // 열 수
  colWidths: string[]; // fr 단위 배열 (예: ["2fr", "1fr", "1fr"])
  rowHeights?: string[]; // px 단위 배열 (예: ["32px", "48px"], 기본 32px 균등)
  gap: number; // 셀 간격 (px, 2~8 권장)
  showBorder: boolean; // 셀 보더 표시
  cells: CardCellDefinition[]; // 셀 목록
}

/** 리스트 모드 컬럼 1개 설정 */
export interface ListColumnConfig {
  columnName: string; // DB 컬럼명
  label: string; // 헤더 라벨
  width?: string; // fr 단위 (기본 "1fr")
  align?: "left" | "center" | "right"; // 정렬
  alternateColumns?: string[]; // 런타임에서 전환 가능한 대체 컬럼 목록
}

/** 오버플로우 방식 */
export type OverflowMode = "loadMore" | "pagination";

/** 페이지네이션 네비게이션 스타일 */
export type PaginationStyle = "bottom" | "side";

/** 오버플로우 설정 */
export interface OverflowConfig {
  visibleRows: number; // 기본 표시 행 수
  mode: OverflowMode; // 오버플로우 방식
  // 더보기 모드 전용
  showExpandButton: boolean; // "더보기" 버튼 표시
  loadMoreCount: number; // 더보기 클릭 시 추가 로딩 행 수
  maxExpandRows: number; // 최대 표시 행 수 (무한 확장 방지)
  // 페이지네이션 모드 전용
  pageSize: number; // 페이지당 표시 행 수
  paginationStyle: PaginationStyle; // bottom: 하단 페이지 표시, side: 좌우 화살표
}

/** 헤더 설정 */
export interface StringListHeaderConfig {
  enabled: boolean; // 헤더 표시 여부
  label?: string; // 헤더 라벨 텍스트
}

/** pop-string-list 전체 설정 */
export interface PopStringListConfig {
  displayMode: StringListDisplayMode;
  header: StringListHeaderConfig;
  overflow: OverflowConfig;
  dataSource: CardListDataSource; // 기존 타입 재활용
  selectedColumns?: string[]; // 사용자가 선택한 컬럼명 목록 (모드 무관 영속)
  listColumns?: ListColumnConfig[]; // 리스트 모드 전용
  cardGrid?: CardGridConfig; // 카드 모드 전용
  rowClickAction?: RowClickAction; // 행 클릭 시 동작 (기본: "none")
}
