import 'package:flutter/material.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:monitoringlistrik/adminhome.dart'; import 'dart:math'; class AddTokenScreen extends StatefulWidget { @override _AddTokenScreenState createState() => _AddTokenScreenState(); } class _AddTokenScreenState extends State { final FirebaseFirestore _firestore = FirebaseFirestore.instance; final TextEditingController _nameController = TextEditingController(); final TextEditingController _tokenController = TextEditingController(); DateTime _selectedDate = DateTime.now(); String _selectedPackage = ''; Future addData() async { String token = generateToken(_selectedPackage); int days; switch (_selectedPackage) { case "1": days = 10; break; case "2": days = 15; break; case "3": days = 30; break; default: return; } _selectedDate = DateTime.now().add(Duration(days: days)); Timestamp deadlineTimestamp = Timestamp.fromDate(_selectedDate); try { await _firestore.collection('room').add({ 'token': token, 'name': _nameController.text, 'deadline': deadlineTimestamp, }); // Show success message ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text('Token berhasil ditambahkan'), backgroundColor: Colors.green, ), ); setState(() { _tokenController.text = token; }); } catch (e) { // Show error message ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text('Gagal menambahkan token: $e'), backgroundColor: Colors.red, ), ); } } String generateToken(String package) { String datePart = DateTime.now().toString().substring(0, 8).replaceAll('-', ''); String randomPart = Random().nextInt(999999).toString().padLeft(6, '0') + 'ABC'; return '$datePart$package$randomPart'; } @override Widget build(BuildContext context) { return Scaffold( backgroundColor: Colors.grey, body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Container( padding: EdgeInsets.all(16.0), decoration: BoxDecoration( color: const Color.fromARGB(255, 227, 227, 227), borderRadius: BorderRadius.all(Radius.circular(30)), ), child: Text( 'Pembelian Token Listrik', style: TextStyle(fontSize: 24), ), ), Spacer(), _buildPackageButton('10 Hari', "1"), _buildPackageButton('15 Hari', "2"), _buildPackageButton('30 Hari', "3"), SizedBox(height: 20), Padding( padding: EdgeInsets.symmetric(horizontal: 50), child: TextField( controller: _nameController, decoration: InputDecoration( labelText: 'Name', border: OutlineInputBorder( borderRadius: BorderRadius.circular(10), ), filled: true, fillColor: Colors.white, ), ), ), SizedBox(height: 20), Padding( padding: EdgeInsets.symmetric(horizontal: 50), child: TextField( controller: _tokenController, enabled: false, // Disable the token field as it is generated automatically decoration: InputDecoration( labelText: 'Token', border: OutlineInputBorder( borderRadius: BorderRadius.circular(10), ), filled: true, fillColor: Colors.white, ), ), ), SizedBox(height: 20), if (_selectedPackage.isNotEmpty) ElevatedButton( onPressed: () async { if (_selectedPackage.isNotEmpty && _nameController.text.isNotEmpty) { await addData(); } else { ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text('Pilih paket dan isi nama'), backgroundColor: Colors.red, ), ); } }, child: Text( 'Tambah Data', style: TextStyle(color: Colors.white), ), style: ElevatedButton.styleFrom( primary: Colors.blue, padding: EdgeInsets.symmetric(horizontal: 24, vertical: 12), ), ), SizedBox(height: 20), ElevatedButton( onPressed: () { Navigator.pushReplacement( context, MaterialPageRoute(builder: (context) => AdminHomeScreen()), ); }, child: Text( 'Kembali', style: TextStyle(color: Colors.white), ), style: ElevatedButton.styleFrom( primary: Colors.blue, padding: EdgeInsets.symmetric(horizontal: 24, vertical: 12), ), ), Spacer() ], ), ), ); } Widget _buildPackageButton(String text, String package) { bool isSelected = _selectedPackage == package; return Container( margin: EdgeInsets.symmetric(vertical: 10.0, horizontal: 20.0), width: 300, child: ElevatedButton( onPressed: () { setState(() { _selectedPackage = package; if (package == "1") { _selectedDate = DateTime.now().add(Duration(days: 10)); } else if (package == "2") { _selectedDate = DateTime.now().add(Duration(days: 15)); } else if (package == "3") { _selectedDate = DateTime.now().add(Duration(days: 30)); } }); }, child: Text( text, style: TextStyle(fontSize: 18), ), style: ElevatedButton.styleFrom( primary: isSelected ? Colors.blue : Colors.white, onPrimary: isSelected ? Colors.white : Colors.black, padding: EdgeInsets.symmetric(horizontal: 24, vertical: 12), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(30), ), ), ), ); } }