// Dart 3 – Null-safety import 'dart:io'; void main() { // (7) Final/Const Variables const int kMinTemp = 15; const int kMaxTemp = 30; // (2) Device Status – initial state bool lightsOn = false; // Lights: on/off int thermostat = 20; // Thermostat: 15..30 bool securityArmed = false; // Security: armed/disarmed // (1) Main Method + (3) User Interaction loop while (true) { _menu(kMinTemp, kMaxTemp); final choice = _readInt(); if (choice == null) { _warn('Invalid input. Enter a number 1–5.'); continue; } // (5) Control Flow: switch + if/else switch (choice) { case 1: // Lights toggle lightsOn = !lightsOn; print('Lights turned ${lightsOn ? "ON" : "OFF"}.'); break; case 2: // Set thermostat with validation (4) + (8) stdout.write('Enter temperature ($kMinTemp–$kMaxTemp): '); final t = _readInt(); if (t == null || t < kMinTemp || t > kMaxTemp) { _warn('Temperature must be between $kMinTemp and $kMaxTemp.'); } else { thermostat = t; print('Thermostat set to $thermostat°C.'); } break; case 3: // Security arm/disarm with string ops (6) + (8) stdout.write('Type "arm" or "disarm": '); final cmd = stdin.readLineSync()?.trim().toLowerCase(); if (cmd == 'arm') { securityArmed = true; print('Security is ${"armed".toUpperCase()}.'); } else if (cmd == 'disarm') { securityArmed = false; print('Security is ${"disarmed".toUpperCase()}.'); } else { _warn('Use only: arm / disarm'); } break; case 4: // (6) Interpolation + FizzBuzz-like rule (5) _printStatus( lightsOn: lightsOn, thermostat: thermostat, securityArmed: securityArmed, ); break; case 5: print('Exiting Smart Home. Goodbye!'); return; default: _warn('Choose a valid option (1–5).'); } } } void _menu(int minT, int maxT) { print('\n=== Smart Home Controller ==='); print('1) Toggle lights (On/Off)'); print('2) Set thermostat ($minT–$maxT °C)'); print('3) Arm/Disarm security system'); print('4) View system status'); print('5) Exit'); stdout.write('Choose an option: '); } int? _readInt() { final s = stdin.readLineSync(); return s == null ? null : int.tryParse(s.trim()); } void _printStatus({ required bool lightsOn, required int thermostat, required bool securityArmed, }) { final lightsMsg = lightsOn ? 'ON' : 'OFF'; final securityMsg = securityArmed ? 'ARMED' : 'DISARMED'; // FizzBuzz-like message final m3 = thermostat % 3 == 0; final m5 = thermostat % 5 == 0; final dayMsg = (m3 && m5) ? 'Perfect Day' : (m3 ? 'Cool Day' : (m5 ? 'Warm Day' : '')); print('\n--- System Status ---'); print('Lights: $lightsMsg'); print('Thermostat: $thermostat°C${dayMsg.isNotEmpty ? " - $dayMsg" : ""}'); print('Security: $securityMsg'); } void _warn(String msg) => print('⚠️ $msg');