import type { KbxLookupDefinition } from './lookup'
import type { KbxKnownFieldKey } from './generated/fieldCatalog'

export type KbxFieldDataType =
  | 'text'
  | 'code'
  | 'integer'
  | 'decimal'
  | 'quantity'
  | 'money'
  | 'date'
  | 'datetime'
  | 'boolean'
  | 'lookup'
  | 'status'

export interface KbxFieldDefinition<T = unknown> {
  /** Canonical fields should use KbxKnownFieldKey. string remains for local/read-model fields during staged adoption. */
  key: KbxKnownFieldKey | (string & {})
  label: string
  aliases?: string[]
  dataType: KbxFieldDataType
  required?: boolean
  maxLength?: number
  precision?: number
  scale?: number
  readonly?: boolean
  importable?: boolean
  exportable?: boolean
  sensitive?: boolean
  masking?: 'name' | 'phone' | 'address' | 'partial'
  deprecated?: boolean
  replacementKey?: KbxKnownFieldKey
  defaultValue?: T
  lookup?: KbxLookupDefinition
  helpText?: string
}
