export class I18nContentError extends Error {
  override readonly name: string = 'I18nContentError'
  readonly _tag = 'I18nContentError' as const // structural discriminant
  constructor(readonly code: string, message: string) {
    super(message)
  }
}

export class UnknownLocaleError extends I18nContentError {
  override readonly name = 'UnknownLocaleError'
  constructor(readonly locale: string) {
    super('UNKNOWN_LOCALE', `locale '${locale}' is not active or does not exist`)
  }
}

export class InvalidFieldKeyError extends I18nContentError {
  override readonly name = 'InvalidFieldKeyError'
  constructor(readonly key: string) {
    super('INVALID_FIELD_KEY', `field key '${key}' is invalid`)
  }
}

export class InvalidEntityIdError extends I18nContentError {
  override readonly name = 'InvalidEntityIdError'
  constructor(readonly entityId: string) {
    super('INVALID_ENTITY_ID', `entity id '${entityId}' is invalid (must be non-empty, ≤ 1024 chars, no null bytes)`)
  }
}

// Structural guard — duck-type on _tag, NO cross-package instanceof
export function isI18nContentError(e: unknown): e is I18nContentError {
  return (
    typeof e === 'object' &&
    e !== null &&
    (e as { _tag?: unknown })._tag === 'I18nContentError'
  )
}
