"use client";

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

/**
 * canonical chart 컴포넌트 설정 타입 (Phase G.3)
 *
 * recharts 기반 4종 차트 (bar / horizontalBar / line / donut) 의 공통 컨피그.
 * 데이터 모델은 `tableName + groupBy + aggregation` 으로 일관 — 백엔드의
 * `/aggregate-group` endpoint 응답을 그대로 차트로 그린다.
 */

export type ChartType = "bar" | "horizontalBar" | "line" | "donut";

export interface ChartDataSource {
  tableName?: string;
  groupBy?: string;
  aggregation?: StatsAggregation;
  /** count 외 집계 (sum / avg / min / max / distinctCount) 에 사용 */
  valueColumn?: string;
  /** OptionFilter 와 동일한 모양 — runtime hook 이 value_type 치환 후 백엔드에 전달 */
  filters?: OptionFilter[];
  /** 표시할 최대 그룹 수 (기본 12). 백엔드는 1~500 까지 허용 */
  limit?: number;
  /** "desc" = 값 큰 순, "asc" = 값 작은 순 (기본 desc) */
  orderDir?: "asc" | "desc";
}

export interface ChartConfig extends ComponentConfig {
  /** 차트 종류 */
  chartType?: ChartType;
  /** 차트 제목 (선택) */
  title?: string;
  /** 데이터 소스 — 없으면 디자인 placeholder 만 표시 */
  dataSource?: ChartDataSource;
  /** 빈 그룹 (null / "") 도 표시할지 여부. 기본 false (필터 아웃) */
  includeEmptyGroup?: boolean;
  /** bar / horizontalBar / line 의 막대/선 색상 (기본 primary) */
  barColor?: string;
  /** donut 슬라이스 팔레트 (없으면 기본 6색) */
  donutPalette?: string[];
  /** Y 축 / X 축 라벨 표시 여부 (기본 true) */
  showAxis?: boolean;
  /** 범례 표시 여부 (기본 true, donut 만 의미) */
  showLegend?: boolean;
}
