"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 grouped-table 설정 타입 (Phase G.3.1)
 *
 * 같은 테이블의 row 들을 클라이언트 측에서 `groupBy` 로 묶어, 그룹 헤더 row + 안쪽
 * child row 들의 두 단계 표로 렌더. 근태 / 일자별 / 부서별 / 카테고리별 view 처럼
 * 한 화면에 row 묶음을 보고 싶을 때 사용.
 */

export interface GroupedTableColumn {
  /** 표시할 컬럼 이름 */
  column: string;
  /** 헤더 라벨 (없으면 column 그대로) */
  label?: string;
  /** 너비 (`100px` 또는 `auto`). 없으면 균등 분배 */
  width?: string;
  /** 정렬 (text/number/center) */
  align?: "left" | "right" | "center";
}

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

export interface GroupedTableConfig extends ComponentConfig {
  title?: string;
  dataSource?: GroupedTableDataSource;
  /** 그룹 키 컬럼. 같은 값을 가진 row 들이 하나의 헤더 row 아래 묶임 */
  groupBy?: string;
  /** 표 컬럼들. 비우면 모든 컬럼 표시 */
  columns?: GroupedTableColumn[];
  /** 그룹 정렬 — 기본 자연 순 (등장 순) */
  sortGroups?: "asc" | "desc" | "none";
  /** 빈 결과 문구 */
  emptyText?: string;
}
