/// 聊天 Domain 实体
class Chat {
  final int id;
  final int? typ;
  final int? lastId;
  final int? lastTyp;
  final String? lastMsg;
  final int? lastTime;
  final int lastPos;
  final int firstPos;
  final int? msgIdx;
  final String? profile;
  final String? pin;
  final String? icon;
  final String iconGaussian;
  final String? name;
  final int? userId;
  final int? chatId;
  final int? friendId;
  final int? sort;
  final int? unreadNum;
  final int? unreadCount;
  final int? hideChatMsgIdx;
  final int? readChatMsgIdx;
  final int? otherReadIdx;
  final String? unreadAtMsgIdx;
  final int? deleteTime;
  final int? addIndex;
  final int flag;
  final int? flagMy;
  final int? autoDeleteInterval;
  final int? mute;
  final int? verified;
  final int? createTime;
  final int? startIdx;
  final int? isReadMsg;
  final String translateOutgoing;
  final String translateIncoming;
  final int incomingIdx;
  final int outgoingIdx;
  final int incomingSoundId;
  final int outgoingSoundId;
  final int notificationSoundId;
  final String chatKey;
  final String activeChatKey;
  final int coverIdx;
  final int round;
  final int workspaceId;
  final int localPermission;

  const Chat({
    required this.id,
    this.typ,
    this.lastId,
    this.lastTyp,
    this.lastMsg,
    this.lastTime,
    this.lastPos = 0,
    this.firstPos = -1,
    this.msgIdx,
    this.profile,
    this.pin,
    this.icon,
    this.iconGaussian = '',
    this.name,
    this.userId,
    this.chatId,
    this.friendId,
    this.sort,
    this.unreadNum,
    this.unreadCount,
    this.hideChatMsgIdx,
    this.readChatMsgIdx,
    this.otherReadIdx,
    this.unreadAtMsgIdx,
    this.deleteTime,
    this.addIndex,
    this.flag = 0,
    this.flagMy,
    this.autoDeleteInterval,
    this.mute,
    this.verified,
    this.createTime,
    this.startIdx,
    this.isReadMsg,
    this.translateOutgoing = '',
    this.translateIncoming = '',
    this.incomingIdx = 0,
    this.outgoingIdx = 0,
    this.incomingSoundId = 0,
    this.outgoingSoundId = 0,
    this.notificationSoundId = 0,
    this.chatKey = '',
    this.activeChatKey = '',
    this.coverIdx = 0,
    this.round = 0,
    this.workspaceId = 0,
    this.localPermission = 0,
  });

  Chat copyWith({
    int? id,
    int? typ,
    int? lastId,
    int? lastTyp,
    String? lastMsg,
    int? lastTime,
    int? lastPos,
    int? firstPos,
    int? msgIdx,
    String? profile,
    String? pin,
    String? icon,
    String? iconGaussian,
    String? name,
    int? userId,
    int? chatId,
    int? friendId,
    int? sort,
    int? unreadNum,
    int? unreadCount,
    int? hideChatMsgIdx,
    int? readChatMsgIdx,
    int? otherReadIdx,
    String? unreadAtMsgIdx,
    int? deleteTime,
    int? addIndex,
    int? flag,
    int? flagMy,
    int? autoDeleteInterval,
    int? mute,
    int? verified,
    int? createTime,
    int? startIdx,
    int? isReadMsg,
    String? translateOutgoing,
    String? translateIncoming,
    int? incomingIdx,
    int? outgoingIdx,
    int? incomingSoundId,
    int? outgoingSoundId,
    int? notificationSoundId,
    String? chatKey,
    String? activeChatKey,
    int? coverIdx,
    int? round,
    int? workspaceId,
    int? localPermission,
  }) {
    return Chat(
      id: id ?? this.id,
      typ: typ ?? this.typ,
      lastId: lastId ?? this.lastId,
      lastTyp: lastTyp ?? this.lastTyp,
      lastMsg: lastMsg ?? this.lastMsg,
      lastTime: lastTime ?? this.lastTime,
      lastPos: lastPos ?? this.lastPos,
      firstPos: firstPos ?? this.firstPos,
      msgIdx: msgIdx ?? this.msgIdx,
      profile: profile ?? this.profile,
      pin: pin ?? this.pin,
      icon: icon ?? this.icon,
      iconGaussian: iconGaussian ?? this.iconGaussian,
      name: name ?? this.name,
      userId: userId ?? this.userId,
      chatId: chatId ?? this.chatId,
      friendId: friendId ?? this.friendId,
      sort: sort ?? this.sort,
      unreadNum: unreadNum ?? this.unreadNum,
      unreadCount: unreadCount ?? this.unreadCount,
      hideChatMsgIdx: hideChatMsgIdx ?? this.hideChatMsgIdx,
      readChatMsgIdx: readChatMsgIdx ?? this.readChatMsgIdx,
      otherReadIdx: otherReadIdx ?? this.otherReadIdx,
      unreadAtMsgIdx: unreadAtMsgIdx ?? this.unreadAtMsgIdx,
      deleteTime: deleteTime ?? this.deleteTime,
      addIndex: addIndex ?? this.addIndex,
      flag: flag ?? this.flag,
      flagMy: flagMy ?? this.flagMy,
      autoDeleteInterval: autoDeleteInterval ?? this.autoDeleteInterval,
      mute: mute ?? this.mute,
      verified: verified ?? this.verified,
      createTime: createTime ?? this.createTime,
      startIdx: startIdx ?? this.startIdx,
      isReadMsg: isReadMsg ?? this.isReadMsg,
      translateOutgoing: translateOutgoing ?? this.translateOutgoing,
      translateIncoming: translateIncoming ?? this.translateIncoming,
      incomingIdx: incomingIdx ?? this.incomingIdx,
      outgoingIdx: outgoingIdx ?? this.outgoingIdx,
      incomingSoundId: incomingSoundId ?? this.incomingSoundId,
      outgoingSoundId: outgoingSoundId ?? this.outgoingSoundId,
      notificationSoundId: notificationSoundId ?? this.notificationSoundId,
      chatKey: chatKey ?? this.chatKey,
      activeChatKey: activeChatKey ?? this.activeChatKey,
      coverIdx: coverIdx ?? this.coverIdx,
      round: round ?? this.round,
      workspaceId: workspaceId ?? this.workspaceId,
      localPermission: localPermission ?? this.localPermission,
    );
  }
}