import { describe, expect, it } from 'vitest'
import * as api from './index.js'
import type { FieldDefinitionVersion, FieldGroup } from './index.js'

const group: FieldGroup = {
  key: 'public_group', title: 'Public group', active: true,
  location: [[{ parameter: 'contentType', operator: 'eq', value: 'article' }]], fields: [],
}
const definition: FieldDefinitionVersion['definition'] = group
void definition

describe('public surface', () => {
  it('exports the documented symbols', () => {
    for (const name of [
      'defineFieldGroup', 'resolveGroups', 'typedValues',
      'getEntityValues', 'setEntityValues', 'deleteEntityValues',
      'createGroup', 'updateGroup', 'deleteGroup', 'listGroups',
      'queryEntities', 'validateValues',
      'assertCanEditFields', 'assertCanManageGroups',
      'fieldsMigrationSql', 'fieldValues', 'fieldGroups', 'fieldGroupDefinitions', 'fieldDefinitionVersions',
      'fieldOptionsDefinitions', 'fieldOptionsDefinitionVersions', 'fieldBlockDefinitions', 'fieldBlockDefinitionVersions',
      'fieldValueNodes', 'fieldsImportStaging', 'fieldsImportJournal', 'fieldsMigrationCheckpoints',
      'fieldsMigrationWriteJournal', 'fieldsSchema',
      'FieldValidationError', 'FieldGroupConflictError', 'FieldAuthorizationError', 'FieldStoreError',
      'isFieldValidationError', 'isFieldGroupConflictError', 'isFieldAuthorizationError', 'isFieldStoreError',
      'FIELD_TYPES', 'FIELD_KEY_RE', 'isMultipleCapable',
      'readFlatFieldValues', 'assertFieldsTransactionIdentity',
      'FieldsStoreContractError', 'isFieldsStoreContractError',
      'parseFieldDefinition', 'parseFieldDefinitionVersion', 'canonicalFieldGroupHash', 'FieldDefinitionVersionError',
      'isFieldDefinitionVersionError',
      'legacyFieldToFinalDefinition', 'legacyFieldGroupToFinalDefinition', 'materializeLegacyFieldDefinitionVersion',
      'resolveFieldDefinitionVersion', 'referencedFieldDefinitionVersions', 'FieldDefinitionIntegrityError',
      'isFieldDefinitionIntegrityError', 'FIELDS_RECURSIVE_EAV_MIGRATION_ID', 'canonicalFieldsMigrationHash',
      'snapshotFlatFieldsCorpus', 'escapeFieldPathSegment', 'fieldPath', 'planFieldsRecursiveEavMigration',
      'fieldsRecursiveEavForwardMigrationSql', 'fieldsRecursiveEavReverseMigrationSql', 'parseLegacyMultipleValueJson',
      'createFieldTypeRegistry', 'defineCustomField', 'isSanitizedFieldHtml', 'sanitizeFieldHtml',
      'assertSerializableFieldPresentation', 'FIELD_DEFINITION_LIMITS', 'FIELD_VALUE_LIMITS',
      'validateFieldValue', 'formatFieldValue', 'serializeFieldValue', 'deserializeFieldValue',
      'redactFieldValueForRevision', 'authorizeRelationshipReplacement', 'encodeFieldValueNodes',
      'decodeFieldValueNodes', 'isCanonicalFieldValuePath', 'repeaterRows', 'flexibleRows',
      'BUILTIN_LOCATION_RESOLVERS', 'createLocationResolverRegistry', 'resolveConditionalPath',
      'evaluateConditionalRule', 'evaluateConditionalLogic', 'validateConditionalDependencies',
      'queryFieldEntities', 'validateFieldsEntityQuery', 'resolveQueryFieldPath',
      'fieldBlockDocuments', 'fieldReusableBlocks', 'fieldRevisions', 'fieldsOperationReceipts',
      'parseFieldGroupDefinition', 'fieldsRuntimeMigrationSql',
      'defineOptionsPage', 'resolveOptionsPages', 'createOptionsPage', 'updateOptionsPage',
      'previewOptionsPageDeactivation', 'applyOptionsPageDeactivation', 'getOptionsValues', 'setOptionsValues',
      'EMPTY_BLOCK_DOCUMENT_VERSION', 'DEFAULT_BLOCK_POLICY', 'defineFieldBlock', 'resolveFieldBlocks',
      'createFieldBlock', 'validateBlockDocument', 'parseBlockDocument', 'serializeBlockDocument',
      'validateBlockPublication', 'renderBlockDocument', 'getBlockDocument', 'setBlockDocument',
      'deleteBlockDocument', 'createReusableBlockResolver', 'previewFieldBlockChange', 'applyFieldBlockChange',
      'captureFieldsRevision', 'createFieldsAutosave', 'getFieldsRevision', 'listFieldsRevisions',
      'diffFieldsRevisions', 'restoreFieldsRevision', 'pruneFieldsAutosaves',
      'FieldsLifecycleError', 'defineFinalFieldGroup', 'resolveFinalFieldGroups', 'createFieldGroup',
      'previewFieldGroupChange', 'applyFieldGroupChange', 'previewFieldsCodeReconciliation',
      'applyFieldsCodeReconciliation', 'fieldsBackupDestinationHash', 'restoreFieldsBackup',
      'FieldsImportError', 'isFieldsImportError', 'parseFieldsImport', 'planFieldsImport',
      'startFieldsImport', 'resumeFieldsImport', 'publishFieldsImport', 'rollbackFieldsImport',
      'planPublishedFieldsImportReverse', 'reversePublishedFieldsImport',
      'exportFields', 'fieldsExportManifestHash',
      'generateFieldsHeadlessSchema', 'FieldsHeadlessError', 'isFieldsHeadlessError',
    ]) expect(api).toHaveProperty(name)
  })
})
