/** 与 SmartBarChart / SmartLineChart 图例位置一致 */
export type LegendPosition = 'top' | 'bottom' | 'left' | 'right';

/** 与 SmartBarChart 柱角一致 */
export type ChartCornerMode = 'square' | 'rounded';

/** 与 SmartLineChart 曲线类型一致 */
export type LineCurveType = 'linear' | 'monotone' | 'step';

/** 与 SmartLineChart 轴数值类型一致 */
export type AxisValueType = 'number' | 'percent';

/** 组合图单条序列：柱或折线，与 Recharts `<Bar>` / `<Line>` 的 dataKey 对齐 */
export interface SmartComposedSeriesItem {
  type: 'bar' | 'line';
  dataKey: string;
  name?: string;
  colorToken?: string;
  /** 双 Y 轴：`'left' | 'right'`；兼容折线图历史 `'0' | '1'` */
  yAxisId?: 'left' | 'right' | '0' | '1';
  /** 仅柱：同 stackId 纵向堆叠 */
  stackId?: string;
}

/**
 * 嵌套 SmartBarChart 行为（组合图内仅竖向类目轴场景使用 stack / corner / 数据标签）。
 * 与 `SmartBarChart` 的 `SmartBarConfig` 字段对齐的子集。
 */
export interface SmartComposedBarConfig {
  stack?: boolean;
  cornerMode?: ChartCornerMode;
  showLabel?: boolean;
}

/**
 * 嵌套 SmartLineChart 行为（点样式、曲线、双轴刻度等）。
 * 与 `SmartLineChart` 的 `SmartLineConfig` 字段对齐的子集。
 */
export interface SmartComposedLineConfig {
  dualAxis?: boolean;
  dualYAxis?: boolean;
  grid?: boolean;
  showDots?: boolean;
  curve?: LineCurveType;
  curveType?: LineCurveType;
  leftAxisType?: AxisValueType;
  rightAxisType?: AxisValueType;
  leftPercentAsFraction?: boolean;
  rightPercentAsFraction?: boolean;
  rightAxisSeries?: (string | number)[];
  rightYAxisSeriesIndex?: number | null;
  rightYAxisTickSuffix?: string;
}

/** 顶层 config：共享布局 + 分发给柱/折线的子配置 */
export interface SmartComposedConfig {
  height?: number;
  showLegend?: boolean;
  legendPosition?: LegendPosition;
  margin?: { top?: number; right?: number; bottom?: number; left?: number };
  resolveRoot?: Element | null;
  /** 柱面子配置（圆角、堆叠、标签）— 与 SmartBarChart 同源逻辑 */
  bar?: SmartComposedBarConfig;
  /** 折线子配置（点、曲线、右轴绑定）— 与 SmartLineChart 同源逻辑 */
  line?: SmartComposedLineConfig;
}

/** 组合图 spec：`series` 为声明式 `{ type, dataKey }[]` */
export interface SmartComposedSpec {
  data: Record<string, unknown>[];
  /** 类目轴字段，默认 `'name'` */
  xAxisKey?: string;
  series: SmartComposedSeriesItem[];
  /** 双 Y 轴：与 `config.line.dualAxis` 二选一，顶层优先 */
  dualAxis?: boolean;
  config?: SmartComposedConfig;
}

export interface SmartComposedChartProps {
  spec: SmartComposedSpec;
}
