/**
 * 表单布局工具
 * 统一处理表单布局相关的计算逻辑
 */

import type { FormConfig } from '../types';

/**
 * 计算表单布局配置
 * @param formConfig 表单配置
 * @returns 表单布局相关配置
 */
export interface FormLayoutConfig {
  /** Form layout 属性 */
  layout: 'vertical' | 'horizontal';
  /** labelCol 配置 */
  labelCol?: { span: number };
  /** wrapperCol 配置 */
  wrapperCol?: { span: number };
  /** labelAlign 属性 */
  labelAlign?: 'left' | 'right';
}

export const computeFormLayout = (formConfig: FormConfig): FormLayoutConfig => {
  const layout = formConfig.labelAlign === 'top' ? 'vertical' : 'horizontal';
  
  let labelCol: { span: number } | undefined;
  let wrapperCol: { span: number } | undefined;
  
  if (formConfig.labelAlign === 'left' || formConfig.labelAlign === 'right') {
    labelCol = { span: 6 };
    wrapperCol = { span: 18 };
  }

  return {
    layout,
    labelCol,
    wrapperCol,
    labelAlign: formConfig.labelAlign === 'top' ? undefined : formConfig.labelAlign,
  };
};

/**
 * 计算栅格列的宽度
 * @param columnSpans 自定义列宽度数组
 * @param columns 列数
 * @param colIndex 当前列索引
 * @returns 列宽度（0-24）
 */
export const computeGridColSpan = (
  columnSpans: number[] | undefined,
  columns: number,
  colIndex: number
): number => {
  if (columnSpans && columnSpans.length > colIndex) {
    return columnSpans[colIndex];
  }
  return Math.floor(24 / columns);
};

