import { validateTypeConfig } from './field-types';
import { buildTag, normalizeId } from './tags';
import type { FieldDefinition, FieldDefinitionInput, FieldDefinitionValidationField, ValidationResult } from './types';

export function createFieldDefinition(input: FieldDefinitionInput): ValidationResult<FieldDefinition, FieldDefinitionValidationField> {
  const fieldCode = normalizeId(input.fieldCode);
  const alias = input.alias.trim();
  const groupCode = normalizeId(input.groupCode);
  const rowId = normalizeId(input.rowId);

  if (!fieldCode) {
    return { ok: false, field: 'field-code', message: '请输入有效的字段编码' };
  }

  if (!alias) {
    return { ok: false, field: 'field-alias', message: '请输入字段名称' };
  }

  if (input.mode === 'repeat' && !groupCode) {
    return { ok: false, field: 'group-code', message: '请输入有效的重复组编码' };
  }

  if (input.mode === 'repeat' && !rowId) {
    return { ok: false, field: 'row-id', message: '请生成或输入行 ID' };
  }

  const typeResult = validateTypeConfig(input.typeConfig);

  if (!typeResult.ok) {
    return typeResult;
  }

  const typeConfig = typeResult.value;

  return {
    ok: true,
    value: {
      mode: input.mode,
      fieldCode,
      alias,
      groupCode,
      rowId,
      tag: buildTag(input.mode, fieldCode, groupCode, rowId),
      color: input.mode === 'repeat' ? { R: 171, G: 126, B: 24 } : { R: 23, G: 109, B: 92 },
      ...typeConfig,
      placeholder: typeConfig.placeholder || alias,
    },
  };
}
