import 'package:equatable/equatable.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import '../../data/database_helper.dart'; import '../../models/device.dart'; part 'device_event.dart'; part 'device_state.dart'; class DeviceBloc extends Bloc { final DatabaseHelper _database; DeviceBloc(this._database) : super(DeviceInitial()) { on(onInsertDeviceWithMacRoot); on(onGetDevices); on(onGetDeviceById); on(onUpdateDeviceName); on(onDeleteDevices); on(onDeleteDeviceById); } Future onInsertDeviceWithMacRoot( InsertDeviceWithMacRoot event, Emitter emit, ) async { emit(DeviceLoading()); try { final meshNetwork = await _database.getMeshNetworkByMacRoot(macRoot: event.macRoot); if (meshNetwork == null) { emit(DeviceFailure('Mesh dengan MAC ${event.macRoot} tidak ditemukan')); return; } await _database.insertDeviceWithMacRoot( macRoot: event.macRoot, nodeId: event.nodeId, name: event.name, role: event.role, ); emit(SaveDeviceSuccess()); } catch (e) { emit(DeviceFailure('Gagal menyimpan device: $e')); } } Future onGetDevices( GetDevices event, Emitter emit, ) async { emit(DeviceLoading()); try { final devices = await _database.getDevices(); emit(DevicesLoaded(devices)); } catch (e) { emit(DeviceFailure('Failed to load devices')); } } Future onGetDeviceById( GetDeviceById event, Emitter emit, ) async { emit(DeviceLoading()); try { final device = await _database.getDeviceById(id: event.id); if (device == null) { emit(DeviceFailure('Device dengan id ${event.id} tidak ditemukan')); return; } emit(DeviceLoaded(device)); } catch (e) { emit(DeviceFailure('Failed to load Device: $e')); } } Future onUpdateDeviceName( UpdateDeviceName event, Emitter emit, ) async { emit(DeviceLoading()); try { await _database.updateDeviceName( id: event.id, name: event.name, ); emit(UpdateDeviceSuccess()); add(GetDevices()); } catch (e) { emit(DeviceFailure('Failed to update Device: $e')); } } Future onDeleteDevices( DeleteDevices event, Emitter emit, ) async { emit(DeviceLoading()); try { await _database.resetDeviceTable(); emit(DeleteDevicesSuccess()); } catch (e) { emit(DeviceFailure('Failed to delete Devices: $e')); } } Future onDeleteDeviceById( DeleteDeviceById event, Emitter emit, ) async { emit(DeviceLoading()); try { await _database.deleteDeviceById(id: event.id); emit(DeleteDeviceSuccess()); } catch (e) { emit(DeviceFailure('Failed to delete Device: $e')); } } }