import 'package:chat/middleware/auth_middleware.dart';
import 'package:chat/views/contact/firend/profile/index_page.dart';
import 'package:chat/views/contact/firend/profile/more_page.dart';
import 'package:chat/views/contact/firend/recommend/friend_page.dart';
import 'package:chat/views/contact/firend/recommend/group_page.dart';
import 'package:chat/views/contact/firend/recommend/index_page.dart';
import 'package:chat/views/contact/firend/remark/index_page.dart';
import 'package:chat/views/contact/firend/request/apply_page.dart';
import 'package:chat/views/contact/firend/request/index_page.dart';
import 'package:chat/views/contact/firend/search/index_page.dart';
import 'package:chat/views/contact/group/create/index_page.dart';
import 'package:chat/views/contact/group/index_page.dart';
import 'package:chat/views/contact/group/manage/index_page.dart';
import 'package:chat/views/contact/group/notification/index_page.dart';
import 'package:chat/views/contact/index/index_page.dart';
import 'package:get/get.dart';

abstract class ContactRoutes {
  /// 身份验证页面
  static const String index = '/contact';

  static const String friend = '/contact/friend';
  static const String friendSearch = '/contact/friend/search';
  static const String friendProfile = '/contact/friend/profile';
  static const String friendProfileMore = '/contact/friend/profile/more';
  static const String friendRemark = '/contact/friend/remark';
  static const String friendRequest = '/contact/friend/request';
  static const String friendRequestApply = '/contact/friend/request/apply';
  static const String friendRecommend = '/contact/friend/recommend';
  static const String friendRecommendFriend =
      '/contact/friend/recommend/friend';
  static const String friendRecommendGroup = '/contact/friend/recommend/group';

  static const String group = '/contact/group';
  static const String groupSearch = '/contact/group/search';
  static const String groupQrCode = '/contact/group/qrCode';
  static const String groupCreate = '/contact/group/create';
  static const String groupNotification = '/contact/group/notification';
  static const String groupManage = '/contact/group/manage';
  static const String groupApprove = '/contact/group/approve';
  static const String groupNickname = '/contact/group/nickname';
  static const String groupKick = '/contact/group/kick';

  static GetPage router = GetPage(
    name: ContactRoutes.index,
    middlewares: [
      EnsureAuthMiddleware(),
    ],
    page: () => const ContactPage(),
    children: [
      GetPage(
        name: '/friend',
        page: () => const ContactGroupPage(),
        children: [
          GetPage(
            name: '/request',
            page: () => const ContactFriendRequestPage(),
            children: [
              GetPage(
                name: '/apply',
                page: () => const ContactFriendRequestApplyPage(),
              ),
            ],
          ),
          GetPage(
            name: '/search',
            page: () => const ContactFriendSearchPage(),
          ),
          GetPage(
            name: '/profile',
            page: () => const ContactFriendProfilePage(),
            children: [
              GetPage(
                name: '/more',
                page: () => const ContactFriendProfileMorePage(),
              ),
            ],
          ),
          GetPage(
            name: '/remark',
            page: () => const ContactFriendRemarkPage(),
          ),
          GetPage(
            name: '/recommend',
            page: () => const ContactFriendRecommendPage(),
            children: [
              GetPage(
                name: '/friend',
                page: () => const ContactFriendRecommendFriendPage(),
              ),
              GetPage(
                name: '/group',
                page: () => const ContactFriendRecommendGroupPage(),
              ),
            ],
          ),
        ],
      ),
      GetPage(
        name: '/group',
        page: () => const ContactGroupPage(),
        children: [
          GetPage(
            name: '/create',
            page: () => const ContactGroupCreatePage(),
          ),
          GetPage(
            name: '/qrCode',
            page: () => const ContactGroupCreatePage(),
          ),
          GetPage(
            name: '/notification',
            page: () => const ContactGroupNotificationPage(),
          ),
          GetPage(
            name: '/manage',
            page: () => const ContactGroupManagePage(),
          ),
          GetPage(
            name: '/approve',
            page: () => const ContactGroupManagePage(),
          ),
        ],
      ),
    ],
  );
}
