import 'package:flutter/widgets.dart';

/// Notification model
///
/// @author Pierre HUBERT

enum NotificationElementType {
  USER_PAGE,
  GROUP_PAGE,
  CONVERSATION,
  CONVERSATION_MESSAGE,
  POST,
  POST_TEXT,
  POST_IMAGE,
  POST_YOUTUBE,
  POST_MOVIE,
  POST_WEBLINK,
  POST_PDF,
  POST_TIMER,
  POST_SURVEY,
  COMMENT,
  FRIENDSHIP_REQUEST,
  GROUP_MEMBERSHIP,
}

enum NotificationType {
  COMMENT_CREATED,
  SENT_FRIEND_REQUEST,
  ACCEPTED_FRIEND_REQUEST,
  REJECTED_FRIEND_REQUEST,
  ELEM_CREATED,
  ELEM_UPDATED,
  SENT_GROUP_MEMBERSHIP_INVITATION,
  ACCEPTED_GROUP_MEMBERSHIP_INVITATION,
  REJECTED_GROUP_MEMBERSHIP_INVITATION,
  SENT_GROUP_MEMBERSHIP_REQUEST,
  ACCEPTED_GROUP_MEMBERSHIP_REQUEST,
  REJECTED_GROUP_MEMBERSHIP_REQUEST,
}

class Notification {
  final int id;
  final int timeCreate;
  final bool seen;
  final int fromUser;
  final int onElemId;
  final NotificationElementType onElemType;
  final NotificationType type;
  final int fromContainerId;
  final NotificationElementType fromContainerType;

  const Notification({
    @required this.id,
    @required this.timeCreate,
    @required this.seen,
    @required this.fromUser,
    @required this.onElemId,
    @required this.onElemType,
    @required this.type,
    @required this.fromContainerId,
    @required this.fromContainerType,
  })  : assert(id != null),
        assert(timeCreate != null),
        assert(seen != null),
        assert(fromUser != null),
        assert(onElemId != null),
        assert(onElemType != null),
        assert(type != null);
}