import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import '../core/app_colors.dart';
import '../core/navigation_provider.dart';
import '../pages/admin/admin_home_page.dart' show adminPageProvider;
import '../providers/auth_provider.dart';
import 'drawer_shell.dart';

class AdminDrawer extends ConsumerWidget {
  const AdminDrawer({super.key});

  @override
  Widget build(BuildContext context, WidgetRef ref) {
    final currentPage = ref.watch(adminPageProvider);
    final pages = ref.read(adminPageProvider.notifier);
    final routes = ref.read(routeStackProvider.notifier);
    final authNotifier = ref.read(authProvider.notifier);

    return DrawerShell(
      child: SafeArea(
        child: CustomScrollView(
          slivers: [
            SliverFillRemaining(
              hasScrollBody: false,
              child: Column(
                children: [
                  Container(
                    margin: const EdgeInsets.all(14),
                    padding: const EdgeInsets.all(16),
                    decoration: BoxDecoration(
                      color: Colors.white.withValues(alpha: 0.88),
                      borderRadius: BorderRadius.circular(22),
                      border: Border.all(
                        color: Colors.white.withValues(alpha: 0.86),
                        width: 1.2,
                      ),
                      boxShadow: AppColors.cardShadowLight,
                    ),
                    child: Row(
                      children: [
                        Container(
                          width: 56,
                          height: 56,
                          decoration: BoxDecoration(
                            gradient: AppColors.primaryGradient,
                            borderRadius: BorderRadius.circular(20),
                            boxShadow: AppColors.buttonShadow,
                          ),
                          child: const Icon(
                            Icons.admin_panel_settings,
                            size: 28,
                            color: Colors.white,
                          ),
                        ),
                        const SizedBox(width: 12),
                        const Expanded(
                          child: Column(
                            crossAxisAlignment: CrossAxisAlignment.start,
                            children: [
                              Text(
                                '系统管理员',
                                style: TextStyle(
                                  fontSize: 17,
                                  fontWeight: FontWeight.w600,
                                  color: AppColors.textPrimary,
                                ),
                              ),
                              SizedBox(height: 3),
                              Text(
                                '医生与患者管理',
                                style: TextStyle(
                                  fontSize: 12,
                                  color: AppColors.textSecondary,
                                ),
                              ),
                            ],
                          ),
                        ),
                      ],
                    ),
                  ),
                  const SizedBox(height: 8),
                  _MenuItem(
                    icon: Icons.local_hospital,
                    label: '医生管理',
                    selected: currentPage == 'doctors',
                    onTap: () => runAfterDrawerClose(
                      context,
                      () => pages.set('doctors'),
                    ),
                  ),
                  _MenuItem(
                    icon: Icons.people_outline,
                    label: '患者列表',
                    selected: currentPage == 'patients',
                    onTap: () => runAfterDrawerClose(
                      context,
                      () => pages.set('patients'),
                    ),
                  ),
                  const Spacer(),
                  const Divider(height: 1, color: AppColors.divider),
                  const SizedBox(height: 8),
                  _MenuItem(
                    icon: Icons.delete_forever_outlined,
                    label: '删除账号',
                    danger: true,
                    onTap: () async {
                      final confirmed = await confirmAccountAction(
                        context,
                        title: '删除账号',
                        message: '此操作会永久删除当前管理员账号及相关数据，删除后无法恢复。',
                        confirmLabel: '确认删除',
                      );
                      if (!confirmed || !context.mounted) return;
                      await runAfterDrawerClose(context, () async {
                        await ref
                            .read(apiClientProvider)
                            .delete('/api/user/account');
                        await authNotifier.logout();
                        routes.replace('login');
                      });
                    },
                  ),
                  _MenuItem(
                    icon: Icons.logout,
                    label: '退出登录',
                    danger: true,
                    onTap: () async {
                      final confirmed = await confirmAccountAction(
                        context,
                        title: '退出登录',
                        message: '确定退出当前管理员账号吗？',
                        confirmLabel: '退出登录',
                      );
                      if (!confirmed || !context.mounted) return;
                      await runAfterDrawerClose(context, () async {
                        await authNotifier.logout();
                        routes.replace('login');
                      });
                    },
                  ),
                  const SizedBox(height: 16),
                ],
              ),
            ),
          ],
        ),
      ),
    );
  }
}

class _MenuItem extends StatelessWidget {
  final IconData icon;
  final String label;
  final VoidCallback onTap;
  final bool selected;
  final bool danger;
  const _MenuItem({
    required this.icon,
    required this.label,
    required this.onTap,
    this.selected = false,
    this.danger = false,
  });

  @override
  Widget build(BuildContext context) {
    final color = danger
        ? AppColors.error
        : selected
        ? const Color(0xFF7C5CFF)
        : AppColors.textPrimary;
    return Padding(
      padding: const EdgeInsets.symmetric(horizontal: 14, vertical: 4),
      child: Material(
        color: Colors.transparent,
        borderRadius: BorderRadius.circular(14),
        child: InkWell(
          borderRadius: BorderRadius.circular(14),
          onTap: onTap,
          child: Container(
            padding: const EdgeInsets.symmetric(horizontal: 14, vertical: 12),
            decoration: BoxDecoration(
              gradient: selected
                  ? AppColors.primaryGradient
                  : AppColors.surfaceGradient,
              borderRadius: BorderRadius.circular(14),
              border: Border.all(
                color: selected
                    ? Colors.white.withValues(alpha: 0.80)
                    : AppColors.borderLight,
                width: 1.1,
              ),
              boxShadow: selected
                  ? AppColors.buttonShadow
                  : AppColors.cardShadowLight,
            ),
            child: Row(
              children: [
                Icon(icon, color: selected ? Colors.white : color, size: 20),
                const SizedBox(width: 12),
                Expanded(
                  child: Text(
                    label,
                    style: TextStyle(
                      fontSize: 15,
                      fontWeight: FontWeight.w700,
                      color: selected ? Colors.white : color,
                    ),
                  ),
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }
}
