import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import '../core/app_colors.dart';
import '../core/navigation_provider.dart';
import '../providers/auth_provider.dart';
import '../pages/doctor/doctor_home_page.dart' show doctorPageProvider;
import 'drawer_shell.dart';

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

  @override
  Widget build(BuildContext context, WidgetRef ref) {
    final auth = ref.watch(authProvider);
    final currentPage = ref.watch(doctorPageProvider);
    final name = auth.user?.name ?? '医生';

    return DrawerShell(
      child: SafeArea(
        child: Column(
          children: [
            _DrawerHeader(
              name: name,
              subtitle: '点击完善医生信息',
              icon: Icons.medical_services_outlined,
              onTap: () {
                Navigator.pop(context);
                pushRoute(ref, 'doctorProfile');
              },
            ),
            const SizedBox(height: 8),
            _DrawerItem(
              icon: Icons.dashboard_outlined,
              label: '工作台',
              selected: currentPage == 'dashboard',
              onTap: () {
                Navigator.pop(context);
                ref.read(doctorPageProvider.notifier).set('dashboard');
              },
            ),
            _DrawerItem(
              icon: Icons.people_outline,
              label: '患者管理',
              selected: currentPage == 'patients',
              onTap: () {
                Navigator.pop(context);
                ref.read(doctorPageProvider.notifier).set('patients');
              },
            ),
            _DrawerItem(
              icon: Icons.chat_outlined,
              label: '问诊列表',
              selected: currentPage == 'consultations',
              onTap: () {
                Navigator.pop(context);
                ref.read(doctorPageProvider.notifier).set('consultations');
              },
            ),
            _DrawerItem(
              icon: Icons.description_outlined,
              label: '报告审核',
              selected: currentPage == 'reports',
              onTap: () {
                Navigator.pop(context);
                ref.read(doctorPageProvider.notifier).set('reports');
              },
            ),
            _DrawerItem(
              icon: Icons.event_note_outlined,
              label: '复查随访',
              selected: currentPage == 'followups',
              onTap: () {
                Navigator.pop(context);
                ref.read(doctorPageProvider.notifier).set('followups');
              },
            ),
            const Spacer(),
            const Divider(height: 1, color: AppColors.divider),
            const SizedBox(height: 8),
            _DrawerItem(
              icon: Icons.settings_outlined,
              label: '设置',
              selected: false,
              onTap: () {
                Navigator.pop(context);
                pushRoute(ref, 'doctorSettings');
              },
            ),
            _DrawerItem(
              icon: Icons.logout,
              label: '退出登录',
              selected: false,
              danger: true,
              onTap: () async {
                Navigator.pop(context);
                await ref.read(authProvider.notifier).logout();
                goRoute(ref, 'login');
              },
            ),
            const SizedBox(height: 16),
          ],
        ),
      ),
    );
  }
}

class _DrawerHeader extends StatelessWidget {
  final String name;
  final String subtitle;
  final IconData icon;
  final VoidCallback onTap;
  const _DrawerHeader({
    required this.name,
    required this.subtitle,
    required this.icon,
    required this.onTap,
  });

  @override
  Widget build(BuildContext context) {
    return 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: InkWell(
        onTap: onTap,
        borderRadius: BorderRadius.circular(16),
        child: Row(
          children: [
            Container(
              width: 56,
              height: 56,
              decoration: BoxDecoration(
                gradient: AppColors.doctorGradient,
                borderRadius: BorderRadius.circular(20),
                boxShadow: AppColors.buttonShadow,
              ),
              child: Icon(icon, color: Colors.white, size: 26),
            ),
            const SizedBox(width: 12),
            Expanded(
              child: Column(
                crossAxisAlignment: CrossAxisAlignment.start,
                children: [
                  Text(
                    name,
                    style: const TextStyle(
                      fontSize: 17,
                      fontWeight: FontWeight.w800,
                      color: AppColors.textPrimary,
                    ),
                    overflow: TextOverflow.ellipsis,
                  ),
                  const SizedBox(height: 3),
                  Text(
                    subtitle,
                    style: const TextStyle(
                      fontSize: 12,
                      color: AppColors.textSecondary,
                    ),
                  ),
                ],
              ),
            ),
          ],
        ),
      ),
    );
  }
}

class _DrawerItem extends StatelessWidget {
  final IconData icon;
  final String label;
  final bool selected;
  final bool danger;
  final VoidCallback onTap;

  const _DrawerItem({
    required this.icon,
    required this.label,
    required this.selected,
    required this.onTap,
    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.doctorGradient
                  : 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, size: 20, color: selected ? Colors.white : color),
                const SizedBox(width: 12),
                Expanded(
                  child: Text(
                    label,
                    style: TextStyle(
                      fontSize: 15,
                      fontWeight: FontWeight.w700,
                      color: selected ? Colors.white : color,
                    ),
                  ),
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }
}
