import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:shadcn_ui/shadcn_ui.dart';
import '../../core/app_colors.dart';
import '../../core/app_design_tokens.dart';
import '../../core/app_theme.dart';
import '../../core/navigation_provider.dart';
import '../../providers/auth_provider.dart';

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

  @override
  Widget build(BuildContext context, WidgetRef ref) {
    return Scaffold(
      backgroundColor: const Color(0xFFF6F8FC),
      appBar: AppBar(
        backgroundColor: Colors.white,
        elevation: 0,
        scrolledUnderElevation: 0.5,
        surfaceTintColor: Colors.transparent,
        leading: IconButton(
          icon: const Icon(Icons.arrow_back, color: AppColors.textPrimary),
          onPressed: () => popRoute(ref),
        ),
        title: const Text(
          '设置',
          style: TextStyle(
            fontSize: 19,
            fontWeight: FontWeight.w700,
            color: AppColors.textPrimary,
          ),
        ),
        centerTitle: true,
      ),
      body: SafeArea(
        child: SingleChildScrollView(
          padding: const EdgeInsets.fromLTRB(16, 18, 16, 32),
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.stretch,
            children: [
              _SettingsGroup(
                children: [
                  _SettingsTile(
                    icon: LucideIcons.bluetooth,
                    title: '蓝牙设备',
                    onTap: () => pushRoute(ref, 'devices'),
                  ),
                  _SettingsTile(
                    icon: LucideIcons.bell,
                    title: '消息通知',
                    onTap: () => pushRoute(ref, 'notificationPrefs'),
                  ),
                  _SettingsTile(
                    icon: LucideIcons.info,
                    title: '关于小脉健康',
                    onTap: () =>
                        pushRoute(ref, 'staticText', params: {'type': 'about'}),
                  ),
                  _SettingsTile(
                    icon: LucideIcons.shield,
                    title: '隐私协议',
                    onTap: () => pushRoute(
                      ref,
                      'staticText',
                      params: {'type': 'privacy'},
                    ),
                  ),
                  _SettingsTile(
                    icon: Icons.fact_check_outlined,
                    title: '个人信息收集清单',
                    onTap: () => pushRoute(
                      ref,
                      'staticText',
                      params: {'type': 'personalInfoList'},
                    ),
                  ),
                  _SettingsTile(
                    icon: Icons.hub_outlined,
                    title: '第三方 SDK 共享清单',
                    onTap: () => pushRoute(
                      ref,
                      'staticText',
                      params: {'type': 'thirdPartySdkList'},
                    ),
                  ),
                  _SettingsTile(
                    icon: Icons.description_outlined,
                    title: '服务协议',
                    onTap: () =>
                        pushRoute(ref, 'staticText', params: {'type': 'terms'}),
                  ),
                ],
              ),
              const SizedBox(height: 24),
              OutlinedButton.icon(
                onPressed: () => _deleteAccount(context, ref),
                icon: const Icon(LucideIcons.trash, size: 19),
                label: const Text('删除账号'),
                style: OutlinedButton.styleFrom(
                  foregroundColor: AppColors.error,
                  side: BorderSide(
                    color: AppColors.error.withValues(alpha: 0.34),
                  ),
                  backgroundColor: Colors.white,
                  minimumSize: const Size.fromHeight(52),
                  textStyle: const TextStyle(
                    fontSize: 16,
                    fontWeight: FontWeight.w800,
                  ),
                  shape: RoundedRectangleBorder(
                    borderRadius: BorderRadius.circular(16),
                  ),
                ),
              ),
              const SizedBox(height: 12),
              ElevatedButton.icon(
                onPressed: () => _logout(context, ref),
                icon: const Icon(LucideIcons.logOut, size: 19),
                label: const Text('退出登录'),
                style: ElevatedButton.styleFrom(
                  backgroundColor: AppColors.error,
                  foregroundColor: Colors.white,
                  minimumSize: const Size.fromHeight(52),
                  textStyle: const TextStyle(
                    fontSize: 16,
                    fontWeight: FontWeight.w800,
                  ),
                  shape: RoundedRectangleBorder(
                    borderRadius: BorderRadius.circular(16),
                  ),
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }

  Future<void> _deleteAccount(BuildContext context, WidgetRef ref) async {
    final ok = await showDialog<bool>(
      context: context,
      builder: (ctx) => AlertDialog(
        shape: RoundedRectangleBorder(
          borderRadius: BorderRadius.circular(AppTheme.rXl),
        ),
        title: const Text('删除账号', style: TextStyle(color: AppColors.error)),
        content: const Text('此操作不可恢复，将删除所有健康数据、用药记录、饮食记录、报告等，确定继续？'),
        actions: [
          TextButton(
            onPressed: () => Navigator.pop(ctx, false),
            child: const Text('取消'),
          ),
          TextButton(
            onPressed: () => Navigator.pop(ctx, true),
            child: const Text('确认删除', style: TextStyle(color: AppColors.error)),
          ),
        ],
      ),
    );
    if (ok == true) {
      await ref.read(apiClientProvider).delete('/api/user/account');
      await ref.read(authProvider.notifier).logout();
      goRoute(ref, 'login');
    }
  }

  Future<void> _logout(BuildContext context, WidgetRef ref) async {
    final ok = await showDialog<bool>(
      context: context,
      builder: (ctx) => AlertDialog(
        shape: RoundedRectangleBorder(
          borderRadius: BorderRadius.circular(AppTheme.rXl),
        ),
        title: const Text('退出登录'),
        content: const Text('确定退出当前账号？'),
        actions: [
          TextButton(
            onPressed: () => Navigator.pop(ctx, false),
            child: const Text('取消'),
          ),
          TextButton(
            onPressed: () => Navigator.pop(ctx, true),
            child: const Text('确定', style: TextStyle(color: AppColors.error)),
          ),
        ],
      ),
    );
    if (ok == true) {
      await ref.read(authProvider.notifier).logout();
      goRoute(ref, 'login');
    }
  }
}

class _SettingsGroup extends StatelessWidget {
  final List<_SettingsTile> children;

  const _SettingsGroup({required this.children});

  @override
  Widget build(BuildContext context) {
    return Container(
      clipBehavior: Clip.antiAlias,
      decoration: BoxDecoration(
        color: Colors.white,
        borderRadius: AppRadius.xlBorder,
      ),
      child: Column(
        children: [
          for (var i = 0; i < children.length; i++) ...[
            children[i],
            if (i < children.length - 1)
              const Padding(
                padding: EdgeInsets.only(left: 52),
                child: Divider(
                  height: 1,
                  thickness: 0.7,
                  color: Color(0xFFE8ECF2),
                ),
              ),
          ],
        ],
      ),
    );
  }
}

class _SettingsTile extends StatelessWidget {
  final IconData icon;
  final String title;
  final VoidCallback onTap;
  const _SettingsTile({
    required this.icon,
    required this.title,
    required this.onTap,
  });

  @override
  Widget build(BuildContext context) {
    return Material(
      color: Colors.white,
      child: InkWell(
        onTap: onTap,
        child: Container(
          padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 14),
          child: Row(
            children: [
              Icon(icon, color: Colors.black, size: 22),
              const SizedBox(width: 14),
              Expanded(
                child: Text(
                  title,
                  style: const TextStyle(
                    fontSize: 16,
                    fontWeight: FontWeight.w600,
                    color: AppColors.textPrimary,
                  ),
                ),
              ),
              const Icon(
                Icons.arrow_forward_ios_rounded,
                size: 15,
                color: AppColors.textHint,
              ),
            ],
          ),
        ),
      ),
    );
  }
}
