import 'package:comwell_key_app/common/components/comwell_app_bar.dart';
import 'package:comwell_key_app/themes/app_spaces.dart';
import 'package:comwell_key_app/utils/l10n_utils.dart';
import 'package:concierge/presentation/theme/app_colors.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:comwell_key_app/presentation/screens/permission_overview/bloc/permission_overview_cubit.dart';
import 'package:comwell_key_app/presentation/screens/permission_overview/bloc/permission_overview_state.dart';

class PermissionOverviewScreen extends StatefulWidget {
  const PermissionOverviewScreen({super.key});

  @override
  State<PermissionOverviewScreen> createState() => _PermissionOverviewScreenState();
}

class _PermissionOverviewScreenState extends State<PermissionOverviewScreen> {
  late final AppLifecycleListener _lifecycleListener;

  @override
  void initState() {
    super.initState();
    _lifecycleListener = AppLifecycleListener(
      onResume: () {
        context.read<PermissionOverviewCubit>().init();
      },
    );
  }

  @override
  void dispose() {
    _lifecycleListener.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return BlocBuilder<PermissionOverviewCubit, PermissionOverviewState>(
      builder: (context, state) {
        final cubit = context.read<PermissionOverviewCubit>();
        final List<(String, String, bool, VoidCallback)> permissions = [
          (
            context.strings.bluetooth_permission_title,
            context.strings.bluetooth_permission_description,
            state.allowBluetooth,
            cubit.onToggleBluetoothPermission,
          ),
          (
            context.strings.accept_notifications,
            context.strings.accept_notifications_rationale,
            state.allowPushNotifications,
            cubit.onTogglePushNotifications,
          ),
          (
            context.strings.allow_usage_tracking,
            context.strings.usage_tracking_rationale,
            state.allowUsageTracking,
            cubit.onToggleUsageTracking,
          ),
        ];
        final theme = Theme.of(context);
        return MultiBlocListener(
          listeners: [
            BlocListener<PermissionOverviewCubit, PermissionOverviewState>(
              listenWhen: (prev, curr) => prev.isLoading && !curr.isLoading && curr.error.isError,
              listener: (context, state) {
                // context.showErrorSnackBar(state.errorMessage);
              },
            ),
          ],
          child: Scaffold(
            appBar: const ComwellAppBar(shouldShowProfileButton: false),
            body: Padding(
              padding: const EdgeInsets.all(16.0),
              child: CustomScrollView(
                slivers: [
                  SliverToBoxAdapter(
                    child: Text(
                      context.strings.permissions,
                      style: const TextStyle(
                        fontSize: 28,
                        fontWeight: FontWeight.w600,
                      ),
                    ),
                  ),
                  const SliverToBoxAdapter(child: AppSpaces.gap16),
                  SliverList.builder(
                    itemCount: permissions.length,
                    itemBuilder: (context, index) {
                      final (title, rationale, allowed, onToggle) = permissions[index];
                      return SwitchListTile(
                        thumbColor: WidgetStateProperty.resolveWith((states) {
                          if (states.contains(WidgetState.selected)) {
                            return AppColors.sandColor;
                          }
                          return Colors.white;
                        }),
                        trackColor: WidgetStateProperty.resolveWith((states) {
                          if (!states.contains(WidgetState.selected)) {
                            return Colors.grey[200];
                          }
                          return null;
                        }),
                        trackOutlineColor: WidgetStatePropertyAll(
                          Theme.of(context).colorScheme.surface,
                        ),
                        title: Text(
                          title,
                          style: theme.textTheme.titleMedium?.copyWith(
                            color: Theme.of(context).colorScheme.onSurface,
                            fontWeight: FontWeight.w600,
                          ),
                        ),
                        subtitle: Text(
                          rationale,
                          style: theme.textTheme.bodySmall?.copyWith(
                            color: Theme.of(context).colorScheme.surfaceTint,
                            fontSize: 12,
                            fontWeight: FontWeight.w400,
                          ),
                        ),
                        value: allowed,
                        onChanged: (bool value) {
                          onToggle();
                        },
                        contentPadding: EdgeInsets.zero,
                      );
                    },
                  ),
                ],
              ),
            ),
          ),
        );
      },
    );
  }
}