import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:syncrow_web/pages/device_managment/all_devices/models/factory_reset_model.dart';
import 'package:syncrow_web/pages/device_managment/shared/batch_control/factory_reset.dart';
// import 'package:syncrow_web/pages/device_managment/shared/batch_control/firmware_update.dart';
import 'package:syncrow_web/pages/device_managment/three_gang_switch/bloc/living_room_bloc.dart';
import 'package:syncrow_web/pages/device_managment/three_gang_switch/factories/living_room_bloc_factory.dart';
import 'package:syncrow_web/pages/device_managment/three_gang_switch/models/living_room_model.dart';
import 'package:syncrow_web/pages/device_managment/shared/toggle_widget.dart';
import 'package:syncrow_web/utils/helpers/responsice_layout_helper/responsive_layout_helper.dart';

class LivingRoomBatchControlsView extends StatelessWidget with HelperResponsiveLayout {
  const LivingRoomBatchControlsView({super.key, required this.deviceIds});

  final List<String> deviceIds;

  @override
  Widget build(BuildContext context) {
    return BlocProvider(
      create: (context) =>
          LivingRoomBlocFactory.create(deviceId: deviceIds.first)..add(LivingRoomFetchBatchEvent(deviceIds)),
      child: BlocBuilder<LivingRoomBloc, LivingRoomState>(
        builder: (context, state) {
          if (state is LivingRoomDeviceStatusLoading) {
            return const Center(child: CircularProgressIndicator());
          } else if (state is LivingRoomDeviceStatusLoaded) {
            return _buildStatusControls(context, state.status);
          } else if (state is LivingRoomDeviceManagementError || state is LivingRoomControlError) {
            return const Center(child: Text('Error fetching status'));
          } else {
            return const Center(child: CircularProgressIndicator());
          }
        },
      ),
    );
  }

  Widget _buildStatusControls(BuildContext context, LivingRoomStatusModel status) {
    final isExtraLarge = isExtraLargeScreenSize(context);
    final isLarge = isLargeScreenSize(context);
    final isMedium = isMediumScreenSize(context);
    return SizedBox(
      child: GridView(
        padding: const EdgeInsets.symmetric(horizontal: 50),
        shrinkWrap: true,
        physics: const NeverScrollableScrollPhysics(),
        gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
          crossAxisCount: isLarge || isExtraLarge
              ? 3
              : isMedium
                  ? 2
                  : 1,
          mainAxisExtent: 140,
          crossAxisSpacing: 12,
          mainAxisSpacing: 12,
        ),
        children: [
          ToggleWidget(
            value: status.switch1,
            code: 'switch_1',
            deviceId: deviceIds.first,
            label: 'Wall Light',
            onChange: (value) {
              context.read<LivingRoomBloc>().add(
                    LivingRoomBatchControl(
                      devicesIds: deviceIds,
                      code: 'switch_1',
                      value: value,
                    ),
                  );
            },
          ),
          ToggleWidget(
            value: status.switch2,
            code: 'switch_2',
            deviceId: deviceIds.first,
            label: 'Ceiling Light',
            onChange: (value) {
              context.read<LivingRoomBloc>().add(
                    LivingRoomBatchControl(
                      devicesIds: deviceIds,
                      code: 'switch_2',
                      value: value,
                    ),
                  );
            },
          ),
          ToggleWidget(
            value: status.switch3,
            code: 'switch_2',
            deviceId: deviceIds.first,
            label: 'Spotlight',
            onChange: (value) {
              context.read<LivingRoomBloc>().add(
                    LivingRoomBatchControl(
                      devicesIds: deviceIds,
                      code: 'switch_3',
                      value: value,
                    ),
                  );
            },
          ),
          // FirmwareUpdateWidget(
          //   deviceId: deviceIds.first,
          //   version: 12,
          // ),
          FactoryResetWidget(callFactoryReset: () {
            context.read<LivingRoomBloc>().add(
                  LivingRoomFactoryResetEvent(
                    status.uuid,
                    FactoryResetModel(devicesUuid: deviceIds),
                  ),
                );
          }),
        ],
      ),
    );
  }
}
