import 'package:flutter/cupertino.dart';
import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart'
    if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_conversation.dart';
import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_info.dart'
    if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_friend_info.dart';
import 'package:tencent_cloud_chat_sdk/models/v2_tim_user_full_info.dart'
    if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_user_full_info.dart';

enum ProfileWidgetEnum {
  /// THe card shows the user info of a specific user.
  userInfoCard,

  /// The switch of if add another user to block list.
  /// This will not shows when friendship relation not exist as default.
  addToBlockListBar,

  /// The switch of if pin the one-to-one conversation to the top of the conversation list.
  /// This will not shows when friendship relation not exist as default.
  pinConversationBar,

  /// The switch of if mute the message notification from a specific user.
  /// This will not shows when friendship relation not exist as default.
  messageMute,

  /// The entrance to search page, please set the `onTap` callback yourself, to the search page with conversation ID.
  /// You can develop it with `TIMUIKitProfileWidget.searchBar`.
  searchBar,

  /// The bar shows the portrait.
  portraitBar,

  /// The bar shows the nickname of a specific user.
  nicknameBar,

  /// The bar shows the user account of a specific user.
  userAccountBar,

  /// The bar shows the signature of a specific user.
  signatureBar,

  /// The bar shows the gender of a specific user.
  /// 1 represent male, 2 represent female.
  genderBar,

  /// The bar shows the birthday of a specific user.
  /// Int like "19981112", means November 12, 1998.
  birthdayBar,

  /// The area shows the buttons,
  /// contains "Send message", "Voice/Video Call", "Delete friend" when has the friend relationship,
  /// while contains "Add friend" when no relationship exists, as default.
  addAndDeleteArea,

  /// The divider between sets of profile widget
  operationDivider,

  /// The setting of remark for a specific user.
  /// This will not shows when friendship relation not exist as default.
  remarkBar,

  /// Custom area, you may define send message, make calling, search or anything you want here.
  customBuilderOne,

  /// Custom area, you may define send message, make calling, search or anything you want here.
  customBuilderTwo,

  /// Custom area, you may define send message, make calling, search or anything you want here.
  customBuilderThree,

  /// Custom area, you may define send message, make calling, search or anything you want here.
  customBuilderFour,

  /// Custom area, you may define send message, make calling, search or anything you want here.
  customBuilderFive
}

typedef ProfileWidgetItemContent = Widget? Function(
  bool isShowJump,
  VoidCallback clearJump,
);

class ProfileWidgetBuilder {
  /// The divider between sets of profile widget
  Widget Function()? operationDivider;

  /// The setting of remark for a specific user
  Widget Function(String remark, Function()? handleTap)? remarkBar;

  /// The switch of if add another user to block list.
  /// This will not shows when friendship relation not exist as default.
  Widget Function(bool isAsBlocked, Function(bool value)? onChange)? addToBlockListBar;

  /// The switch of if pin the one-to-one conversation to the top of the conversation list.
  /// This will not shows when friendship relation not exist as default.
  Widget Function(bool isPinned, Function(bool value)? onChange)? pinConversationBar;

  /// The switch of if mute the message notification from a specific user.
  /// This will not shows when friendship relation not exist as default.
  Widget Function(bool isMute, Function(bool value)? onChange)? messageMute;

  /// Override the default operation item style for un-customized profile widget.
  Widget Function({
    required String operationName,
    required String type,
    bool? operationValue,
    String? operationText,
    void Function(bool newValue)? onSwitchChange,
  })? operationItem;

  /// The entrance to search page, please set the `onTap` callback yourself, to the search page with conversation ID.
  /// You can develop it with `TIMUIKitProfileWidget.searchBar`.
  Widget Function(V2TimConversation conversation)? searchBar;

  /// The bar shows the portrait.
  Widget Function(V2TimUserFullInfo? userInfo)? portraitBar;

  /// The bar shows the nickname of a specific user.
  Widget Function(String nickName)? nicknameBar;

  /// The bar shows the user account of a specific user.
  Widget Function(String userAccount)? userAccountBar;

  /// The bar shows the signature of a specific user.
  Widget Function(String signature)? signatureBar;

  /// The bar shows the gender of a specific user.
  /// 1 represent male, 2 represent female.
  Widget Function(int gender)? genderBar;

  /// The bar shows the birthday of a specific user.
  /// Int like "19981111", means November 11, 1998.
  Widget Function(int? birthday)? birthdayBar;

  /// THe card shows the user info of a specific user.
  Widget Function(V2TimUserFullInfo? userInfo)? userInfoCard;

  /// The area shows the buttons,
  /// contains "Send message", "Voice/Video Call", "Delete friend" when has the friend relationship,
  /// while contains "Add friend" when no relationship exists, as default.
  Widget Function(V2TimFriendInfo friendInfo, V2TimConversation conversation, int friendType, bool isDisturb)?
      addAndDeleteArea;

  /// Custom area, you may define send message, make calling, search or anything you want here.
  Widget Function(bool isFriend, V2TimFriendInfo friendInfo, V2TimConversation conversation)? customBuilderOne;

  /// Custom area, you may define send message, make calling, search or anything you want here.
  Widget Function(bool isFriend, V2TimFriendInfo friendInfo, V2TimConversation conversation)? customBuilderTwo;

  /// Custom area, you may define send message, make calling, search or anything you want here.
  Widget Function(bool isFriend, V2TimFriendInfo friendInfo, V2TimConversation conversation)? customBuilderThree;

  /// Custom area, you may define send message, make calling, search or anything you want here.
  Widget Function(bool isFriend, V2TimFriendInfo friendInfo, V2TimConversation conversation)? customBuilderFour;

  /// Custom area, you may define send message, make calling, search or anything you want here.
  Widget Function(bool isFriend, V2TimFriendInfo friendInfo, V2TimConversation conversation)? customBuilderFive;

  ProfileWidgetBuilder(
      {this.operationDivider,
      this.remarkBar,
      this.addToBlockListBar,
      this.pinConversationBar,
      this.messageMute,
      this.operationItem,
      this.searchBar,
      this.portraitBar,
      this.nicknameBar,
      this.userAccountBar,
      this.signatureBar,
      this.genderBar,
      this.birthdayBar,
      this.userInfoCard,
      this.addAndDeleteArea,
      this.customBuilderOne,
      this.customBuilderTwo,
      this.customBuilderThree,
      this.customBuilderFive,
      this.customBuilderFour});
}
