import { v4 as uuid } from 'uuid';

export interface MessageParams {
  timestamp: number;
  identifier?: string;
}

export abstract class Message {
  public readonly timestamp: number;
  public readonly identifier: string;

  constructor({ timestamp, identifier }: MessageParams) {
    this.timestamp = timestamp;
    if (identifier && identifier.length === 0) {
      throw new Error('Cannot set empty identifier');
    }
    if (!timestamp) {
      throw new Error('Cannot set undefined timestamp');
    }
    this.identifier = identifier || uuid();
  }
}