/**
 * Social Bounded Context
 *
 * Handles following, muting, and other social graph relationships.
 */

// Aggregates
export { FollowList } from './FollowList'
export type { FollowEntry, FollowListChange } from './FollowList'

export { MuteList } from './MuteList'
export type { MuteEntry, MuteVisibility, MuteListChange } from './MuteList'

// Domain Events
export {
  DomainEvent,
  UserFollowed,
  UserUnfollowed,
  FollowListPublished,
  UserMuted,
  UserUnmuted,
  MuteVisibilityChanged,
  MuteListPublished
} from './events'
export type { SocialDomainEvent } from './events'

// Errors
export {
  CannotFollowSelfError,
  CannotMuteSelfError,
  NotAuthenticatedError,
  FollowListOperationError,
  MuteListOperationError
} from './errors'

// Repository Interfaces
export type { FollowListRepository, MuteListRepository } from './repositories'

// Adapters for migration
export {
  // FollowList adapters
  toFollowList,
  tryToFollowList,
  fromFollowListToHexSet,
  fromFollowListToHexArray,
  isFollowingHex,
  followByHex,
  unfollowByHex,
  // MuteList adapters
  toMuteList,
  tryToMuteList,
  fromMuteListToHexSet,
  fromMuteListToPublicHexSet,
  fromMuteListToPrivateHexSet,
  isMutedHex,
  getMuteVisibilityByHex,
  mutePubliclyByHex,
  mutePrivatelyByHex,
  unmuteByHex,
  // Combined adapters
  createMuteFilter,
  createFollowFilter
} from './adapters'
