"use client";

import type { ComponentConfig } from "@/types/component";
import type { OptionFilter } from "@/lib/registry/components/input/use-option-loader";
import type { SelectRowsOrderBy } from "@/lib/api/stats";

/**
 * canonical card-list 설정 타입 (Phase G.3.1)
 *
 * 한 테이블에서 가져온 row 들을 카드 카탈로그처럼 반복 출력. 카드 한 장당
 * `titleField` 가 위에, `subtitleFields` 가 아래 작은 글씨로, `metricFields` 는
 * 우측 또는 하단에 숫자 / 라벨 칩으로 표시.
 */

export type CardListLayout = "list" | "grid";

export interface CardListMetric {
  /** 표시할 column 이름 */
  column: string;
  /** 카드 위 보일 라벨 (없으면 column 그대로) */
  label?: string;
  /** primary color glow 강조 (기본 false) */
  emphasis?: boolean;
}

export interface CardListDataSource {
  tableName?: string;
  filters?: OptionFilter[];
  orderBy?: SelectRowsOrderBy[];
  limit?: number;
}

export interface CardListConfig extends ComponentConfig {
  title?: string;
  layout?: CardListLayout;
  /** grid 모드일 때 한 줄 카드 수 (default auto-fit 200px). 명시하면 컬럼 상한 */
  columns?: number;
  dataSource?: CardListDataSource;
  /** 카드 제목으로 쓸 컬럼 */
  titleField?: string;
  /** 카드 부제 컬럼들 — 위에서부터 라인별 표시 */
  subtitleFields?: string[];
  /** 카드 우측/하단의 metric 칩들 */
  metricFields?: CardListMetric[];
  /** 빈 결과일 때 표시 문구 (기본: "데이터 없음") */
  emptyText?: string;
}
