import 'package:comunic/models/conversation.dart';
import 'package:comunic/models/friend.dart';
import 'package:flutter/material.dart';

/// Membership information
///
/// @author Pierre Hubert

enum MembershipType { FRIEND, GROUP, CONVERSATION }

class Membership {
  final MembershipType type;
  final Conversation conversation;
  final Friend friend;
  final int groupID;
  final int groupLastActive;

  Membership.conversation(this.conversation)
      : type = MembershipType.CONVERSATION,
        friend = null,
        groupID = null,
        groupLastActive = null,
        assert(conversation != null);

  Membership.friend(this.friend)
      : type = MembershipType.FRIEND,
        conversation = null,
        groupID = null,
        groupLastActive = null,
        assert(friend != null);

  Membership.group({@required this.groupID, @required this.groupLastActive})
      : type = MembershipType.GROUP,
        conversation = null,
        friend = null,
        assert(groupID != null),
        assert(groupLastActive != null);

  int get lastActive {
    switch (type) {
      case MembershipType.FRIEND:
        return friend.lastActive;
      case MembershipType.GROUP:
        return groupLastActive;
      case MembershipType.CONVERSATION:
        return conversation.lastActive;
      default:
        throw Exception("Unreachable statment!");
    }
  }
}