import { migrations as VeramoDataStoreMigrations, Entities as VeramoDataStoreEntities } from '@veramo/data-store'
import { CreateContacts1659463079429 } from './1-CreateContacts'
import { CreatePresentationDefinitions1716533767523 } from './10-CreatePresentationDefinitions'
import { FixCredentialClaimsReferencesUuid1741895822987 } from './11-FixCredentialClaimsReferenceUuid'
import { AddBitstringStatusListEnum1741895823000, CreateBitstringStatusList1741895823000 } from './12-CreateBitstringStatusList'
import { CreateDcqlQueryItem1726617600000 } from './13-CreateDcqlQueryItem'
import { AddLinkedVpFields1763387280000 } from './14-AddLinkedVpFields'
import { AddBrandingState1766000000000 } from './15-AddBrandingState'
import { AddServiceMetadata1764000000000 } from './15-AddServiceMetadata'
import { MakeOpenIdClientSecretNullable1767000000000 } from './16-MakeOpenIdClientSecretNullable'
import { AddCredentialClaimOrder1768000000000 } from './17-AddCredentialClaimOrder'
import { CreateIssuanceBranding1659463079429 } from './2-CreateIssuanceBranding'
import { CreateContacts1690925872318 } from './3-CreateContacts'
import { CreateStatusList1693866470000 } from './4-CreateStatusList'
import { CreateAuditEvents1701635835330 } from './5-CreateAuditEvents'
import { CreateDigitalCredential1708525189000 } from './6-CreateDigitalCredential'
import { CreateMachineStateStore1708098041262 } from './7-CreateMachineStateStore'
import { CreateContacts1708525189000 } from './8-CreateContacts'
import { CreateContacts1715761125000 } from './9-CreateContacts'

/**
 * The migrations array that SHOULD be used when initializing a TypeORM database connection.
 *
 * These ensure the correct creation of tables and the proper migrations of data when tables change between versions.
 *
 * @public
 */

// Individual migrations per purpose. Allows parties to not run migrations and thus create/update tables if they are not using a particular feature (yet)
export const DataStoreContactMigrations = [
  CreateContacts1659463079429,
  CreateContacts1690925872318,
  CreateContacts1708525189000,
  CreateContacts1715761125000,
  MakeOpenIdClientSecretNullable1767000000000,
]
export const DataStoreIssuanceBrandingMigrations = [
  CreateIssuanceBranding1659463079429,
  FixCredentialClaimsReferencesUuid1741895822987,
  AddBrandingState1766000000000,
  AddCredentialClaimOrder1768000000000,
]
export const DataStoreStatusListMigrations = [
  CreateStatusList1693866470000,
  AddBitstringStatusListEnum1741895823000,
  CreateBitstringStatusList1741895823000,
]
export const DataStoreEventLoggerMigrations = [CreateAuditEvents1701635835330]
export const DataStoreDigitalCredentialMigrations = [CreateDigitalCredential1708525189000, AddLinkedVpFields1763387280000]
export const DataStoreMachineStateMigrations = [CreateMachineStateStore1708098041262]
export const DataStorePresentationDefinitionMigrations = [CreatePresentationDefinitions1716533767523, CreateDcqlQueryItem1726617600000]
export const DataStoreServiceMigrations = [AddServiceMetadata1764000000000]

// All migrations together
export const DataStoreMigrations = [
  ...DataStoreContactMigrations,
  ...DataStoreIssuanceBrandingMigrations,
  ...DataStoreStatusListMigrations,
  ...DataStoreEventLoggerMigrations,
  ...DataStoreDigitalCredentialMigrations,
  ...DataStoreMachineStateMigrations,
  ...DataStorePresentationDefinitionMigrations,
  ...DataStoreServiceMigrations,
]



// All migrations combined with Veramo migrations first - use this when you need both
export const DataStoreMigrationsWithVeramo = [
  ...VeramoDataStoreMigrations,
  ...DataStoreMigrations,
]

// Re-export Veramo migrations and entities for convenience
export { VeramoDataStoreMigrations, VeramoDataStoreEntities }
