"use client";

import { createComponentDefinition } from "../../utils/createComponentDefinition";
import { ComponentCategory } from "@/types/component";
import { StatsWrapper } from "./StatsComponent";
import { InvStatsConfigPanel } from "./InvStatsConfigPanel";
import type { StatsConfig } from "./types";

/**
 * Stats — 통합 통계/KPI 카드 컴포넌트 (2026-04-11, Phase B-2)
 *
 * 흡수 대상:
 *   - v2-aggregation-widget (base)
 *   - v2-status-count
 *   - v2-card-display
 *   - aggregation-widget (legacy)
 *   - card-display (legacy)
 *   - customer-item-mapping (legacy; 도메인 특화, Phase F 에서 별도 처리 고려)
 *
 * 변형:
 *   - style: card | chip | bigNumber
 *   - orientation: horizontal | vertical | grid

 *   - items: 각 KPI 항목 (라벨, DB 바인딩, 아이콘, 색상, 선택 fallback / 변화량)
 *
 * 관련 문서:
 *   notes/gbpark/2026-04-11-component-unification-plan.md §3.6
 */

const DEFAULT_CONFIG: Partial<StatsConfig> = {
  orientation: "horizontal",
  style: "card",
  // Phase G.4.2 — DB-first 기본. 새 stats 컴포넌트는 각 항목이 dataSource 를 가지고
  // 시작. 정적 value 는 박지 않는다 — 디자인 모드에서 자연스럽게 "—" 표시되고
  // 사용자가 테이블/필터를 채우면 운영 모드에서 KPI 가 자동 동작.
  items: [
    { label: "항목 1", icon: "BarChart3", dataSource: { aggregation: "count" } },
    { label: "항목 2", icon: "TrendingUp", dataSource: { aggregation: "count" } },
    { label: "항목 3", icon: "DollarSign", dataSource: { aggregation: "count" } },
  ],
};

export const StatsDefinition = createComponentDefinition({
  id: "stats",
  name: "통계 카드",
  name_eng: "Stats",
  description: "수량, 합계, 상태 등 핵심 수치 표시",
  category: ComponentCategory.DISPLAY,
  web_type: "text",
  component: StatsWrapper,
  default_config: DEFAULT_CONFIG as Record<string, any>,
  default_size: { width: 480, height: 120 },
  config_panel: InvStatsConfigPanel,
  icon: "BarChart",
  tags: ["통계", "kpi", "stats", "aggregation", "card"],
  version: "2.0.0",
  author: "INVYONE",
  documentation:
    "notes/gbpark/2026-04-11-component-unification-plan.md#36-stats",
  // ─── INVYONE DataPort 선언 ───
  dataPorts: {
    inputs: [{ name: "data", type: "rows" }],
  },
});

export type { StatsConfig } from "./types";
export { StatsComponent, StatsWrapper } from "./StatsComponent";
export { InvStatsConfigPanel } from "./InvStatsConfigPanel";
