import 'package:go_router/go_router.dart';

import '/screens/avatar_view/avatar_view_screen.dart';
import '/screens/my_profile/change_profile_screen/change_account_screen.dart';
import '/screens/my_profile/change_profile_screen/change_my_avatar_screen.dart';
import '/screens/contact_add/invite_group_chat_member_screen.dart';
import '/screens/group_chat_profile/change_group_chat_screen/change_group_chat_avatar_screen.dart';
import '/screens/group_chat_profile/change_group_chat_screen/change_group_chat_intro_screen.dart';
import '/screens/group_chat_profile/change_group_chat_screen/change_group_chat_name_screen.dart';
import '/screens/group_chat_profile/change_group_chat_screen/change_group_chat_remark_screen.dart';
import '/screens/group_chat_profile/change_group_chat_screen/change_my_remark_screen.dart';
import '/screens/group_chat_profile/group_chat_outline_screen/group_chat_outline_screen.dart';
import '/screens/group_chat_profile/group_chat_profile_screen.dart';
import '/screens/my_profile/change_profile_screen/change_basic_screen.dart';
import '/screens/my_profile/my_profile_screen.dart';
import '/screens/friend_profile/friend_profile_screen.dart';
import '/screens/friend_profile/friend_setting_screen/friend_setting_screen.dart';
import 'router_key.dart';

final myProfileRoute = GoRoute(
  path: '/my_profile',
  name: 'MyProfile',
  parentNavigatorKey: rootNavigatorKey,
  builder: (context, state) {
    return const MyProfileScreen();
  },
  routes: [
    GoRoute(
      path: 'avatar',
      name: 'MyAvatar',
      parentNavigatorKey: rootNavigatorKey,
      builder: (context, state) {
        return AvatarViewScreen(
          isMyself: true,
          avatarType: AvatarType.user,
          avatar: state.uri.queryParameters['avatar']!,
        );
      },
    ),
    GoRoute(
      path: 'change_avatar',
      name: 'ChangeMyAvatar',
      parentNavigatorKey: rootNavigatorKey,
      builder: (context, state) {
        return const ChangeMyAvatarScreen();
      },
    ),
    GoRoute(
      path: 'change_basic',
      name: 'ChangeBasic',
      parentNavigatorKey: rootNavigatorKey,
      builder: (context, state) {
        return const ChangeBasicScreen();
      },
    ),
    GoRoute(
      path: 'change_Account',
      name: 'ChangeAccount',
      parentNavigatorKey: rootNavigatorKey,
      builder: (context, state) {
        return const ChangeAccountScreen();
      },
    ),
  ],
);

final friendProfileRoute = GoRoute(
  path: '/friend_profile',
  name: 'FriendProfile',
  parentNavigatorKey: rootNavigatorKey,
  builder: (context, state) {
    return FriendProfileScreen(
      friendId: state.uri.queryParameters['friendId']!,
    );
  },
  routes: [
    GoRoute(
      path: 'avatar',
      name: 'FriendAvatar',
      parentNavigatorKey: rootNavigatorKey,
      builder: (context, state) {
        return AvatarViewScreen(
          isMyself: false,
          avatarType: AvatarType.user,
          avatar: state.uri.queryParameters['avatar']!,
        );
      },
    ),
    GoRoute(
      path: 'setting',
      name: 'FriendSetting',
      parentNavigatorKey: rootNavigatorKey,
      builder: (context, state) {
        return FriendSettingScreen(
          friendId: state.uri.queryParameters['friendId']!,
        );
      },
    ),
  ],
);

final groupChatProfileRoute = GoRoute(
  path: '/group_chat_profile',
  name: 'GroupChatProfile',
  parentNavigatorKey: rootNavigatorKey,
  builder: (context, state) {
    return GroupChatProfileScreen(
      groupChatId: state.uri.queryParameters['groupChatId']!,
    );
  },
  routes: [
    GoRoute(
      path: 'outline',
      name: 'GroupChatOutline',
      parentNavigatorKey: rootNavigatorKey,
      builder: (context, state) {
        return GroupChatOutlineScreen(
          groupChatId: state.uri.queryParameters['groupChatId']!,
        );
      },
    ),
    GoRoute(
      path: 'invite_member',
      name: 'InviteGroupChatMember',
      parentNavigatorKey: rootNavigatorKey,
      builder: (context, state) {
        return InviteGroupChatMemberScreen(
          groupChatId: state.uri.queryParameters['groupChatId']!,
        );
      },
    ),
    GoRoute(
      path: 'change_avatar',
      name: 'ChangeGroupChatAvatar',
      parentNavigatorKey: rootNavigatorKey,
      builder: (context, state) {
        return ChangeGroupChatAvatarScreen(
          groupChatId: state.uri.queryParameters['groupChatId']!,
        );
      },
    ),
    GoRoute(
      path: 'change_name',
      name: 'ChangeGroupChatName',
      parentNavigatorKey: rootNavigatorKey,
      builder: (context, state) {
        return ChangeGroupChatNameScreen(
          groupChatId: state.uri.queryParameters['groupChatId']!,
          name: state.uri.queryParameters['name']!,
        );
      },
    ),
    GoRoute(
      path: 'change_intro',
      name: 'ChangeGroupChatIntro',
      parentNavigatorKey: rootNavigatorKey,
      builder: (context, state) {
        return ChangeGroupChatIntroScreen(
          groupChatId: state.uri.queryParameters['groupChatId']!,
          intro: state.uri.queryParameters['intro']!,
        );
      },
    ),
    GoRoute(
      path: 'change_remark',
      name: 'ChangeGroupChatRemark',
      parentNavigatorKey: rootNavigatorKey,
      builder: (context, state) {
        return ChangeGroupChatRemarkScreen(
          groupChatId: state.uri.queryParameters['groupChatId']!,
          nameRemark: state.uri.queryParameters['groupChatRemark']!,
        );
      },
    ),
    GoRoute(
      path: 'change_my_remark',
      name: 'ChangeMyRemark',
      parentNavigatorKey: rootNavigatorKey,
      builder: (context, state) {
        return ChangeMyRemarkScreen(
          groupChatId: state.uri.queryParameters['groupChatId']!,
          myRemark: state.uri.queryParameters['remarkInGroupChat']!,
        );
      },
    ),
  ],
);