import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; import 'package:insparkspokalen_ui/services/backend/activityService.dart'; import 'package:insparkspokalen_ui/models/activityModel.dart'; class AdminCalendarPage extends StatefulWidget { const AdminCalendarPage({super.key}); @override State createState() => AdminCalendarPageState(); } class AdminCalendarPageState extends State { List aktiviteter = []; @override void initState() { super.initState(); _fetchActivities(); } void _fetchActivities() async { try { List fetchedActivities = await ActivityService().fetchActivities(); fetchedActivities.sort( (a, b) => a.date.compareTo(b.date), ); // Sortering: nyast först setState(() { aktiviteter = fetchedActivities; }); } catch (e) { print("Error fetching activities: $e"); } } void _deleteActivity(ActivityModel activity) async { try { print("Försöker ta bort aktivitet med ID: ${activity.id}"); await ActivityService().deleteActivity(activity); setState(() { aktiviteter.remove(activity); }); print("Aktivitet borttagen"); } catch (e) { print("Error deleting activity: $e"); ScaffoldMessenger.of(context).showSnackBar( SnackBar(content: Text("Kunde inte ta bort aktiviteten.")), ); } } void _confirmDelete(BuildContext context, ActivityModel activity) { showDialog( context: context, builder: (context) => AlertDialog( title: const Text("Ta bort aktivitet"), content: const Text( "Är du säker på att du vill ta bort denna aktivitet?", ), actions: [ TextButton( onPressed: () => Navigator.of(context).pop(), child: const Text("Avbryt"), ), TextButton( onPressed: () { Navigator.of(context).pop(); _deleteActivity(activity); }, child: const Text( "Ta bort", style: TextStyle(color: Colors.red), ), ), ], ), ); } DateTime valdDatumTid = DateTime.now(); final TextEditingController _slutTidController = TextEditingController(); final TextEditingController _beskrivningController = TextEditingController(); void _showDialogCalendar() { print("Dialogen för kalendern öppnas!"); final titleController = TextEditingController(); final placeController = TextEditingController(); _slutTidController.clear(); _beskrivningController.clear(); valdDatumTid = DateTime.now(); showModalBottomSheet( context: context, isScrollControlled: true, builder: (context) => StatefulBuilder( builder: (context, setModalState) => Padding( padding: MediaQuery.of(context).viewInsets, child: Container( padding: const EdgeInsets.all(16), child: Wrap( children: [ const Text( "Lägg till aktivitet", style: TextStyle( fontSize: 20, fontWeight: FontWeight.bold, ), ), const SizedBox(height: 16), TextField( controller: titleController, decoration: const InputDecoration(labelText: 'Titel'), ), TextField( controller: placeController, decoration: const InputDecoration(labelText: 'Plats'), ), const SizedBox(height: 16), const Text( "Välj startdatum och tid:", style: TextStyle(fontWeight: FontWeight.bold), ), SizedBox( height: 200, child: CupertinoDatePicker( initialDateTime: valdDatumTid, mode: CupertinoDatePickerMode.dateAndTime, use24hFormat: true, onDateTimeChanged: (DateTime newDateTime) { setModalState(() => valdDatumTid = newDateTime); }, ), ), const SizedBox(height: 16), TextField( controller: _slutTidController, decoration: const InputDecoration( labelText: 'Sluttid (valfritt)', ), ), const SizedBox(height: 16), TextField( controller: _beskrivningController, decoration: const InputDecoration( labelText: 'Beskrivning (valfritt)', ), maxLines: 3, ), const SizedBox(height: 16), ElevatedButton( style: ElevatedButton.styleFrom( backgroundColor: Colors.white, foregroundColor: Colors.black, elevation: 2, ), onPressed: () { final titel = titleController.text; final plats = placeController.text; final slutTid = _slutTidController.text.isNotEmpty ? _slutTidController.text : null; final beskrivning = _beskrivningController.text.isNotEmpty ? _beskrivningController.text : null; if (titel.isNotEmpty && plats.isNotEmpty) { final newActivity = ActivityModel( name: titel, startTime: "${valdDatumTid.hour.toString().padLeft(2, '0')}:${valdDatumTid.minute.toString().padLeft(2, '0')}", place: plats, description: beskrivning, date: valdDatumTid, endTime: slutTid, ); setState(() { aktiviteter.add(newActivity); aktiviteter.sort( (a, b) => b.date.compareTo(a.date), ); // Behåll sortering efter ny aktivitet }); ActivityService().createActivity(newActivity); Navigator.pop(context); } }, child: const Text("Lägg till aktivitet"), ), ], ), ), ), ), ); } @override Widget build(BuildContext context) { return Scaffold( backgroundColor: const Color(0xFF2E2E2E), appBar: AppBar( backgroundColor: const Color(0xFF2E2E2E), centerTitle: true, title: const SizedBox.shrink(), ), floatingActionButton: FloatingActionButton( onPressed: _showDialogCalendar, backgroundColor: Colors.white, foregroundColor: Colors.black, child: const Icon(Icons.add), ), body: ListView.builder( itemCount: aktiviteter.length, itemBuilder: (context, index) { final aktivitet = aktiviteter[index]; final datumStr = DateFormat('yyyy-MM-dd').format(aktivitet.date); final startTidStr = aktivitet.startTime; final slutTidStr = aktivitet.endTime ?? "Sent"; return Card( margin: const EdgeInsets.symmetric(vertical: 8, horizontal: 16), child: ListTile( leading: const Icon(Icons.event, color: Color(0xFFDAA520)), title: Text(aktivitet.name), subtitle: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( children: [ const Icon(Icons.location_on, color: Colors.grey), const SizedBox(width: 4), Text( aktivitet.place, style: const TextStyle(color: Colors.grey), ), ], ), Row( children: [ const Icon(Icons.calendar_today, color: Colors.grey), const SizedBox(width: 4), Text( "$datumStr · $startTidStr - $slutTidStr", style: const TextStyle(color: Colors.grey), ), ], ), if (aktivitet.description != null) const Text( "Tryck för beskrivning", style: TextStyle( color: Colors.blue, fontStyle: FontStyle.italic, ), ), ], ), trailing: IconButton( icon: const Icon(Icons.delete, color: Colors.red), onPressed: () { _confirmDelete(context, aktivitet); }, ), onTap: () { if (aktivitet.description != null) { showDialog( context: context, builder: (context) => AlertDialog( title: Text(aktivitet.name), content: Text(aktivitet.description!), actions: [ TextButton( onPressed: () => Navigator.pop(context), child: const Text("Stäng"), ), ], ), ); } }, ), ); }, ), ); } }