import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; // Används för att formatera tid import 'package:insparkspokalen_ui/services/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(); setState(() { aktiviteter = fetchedActivities; }); } catch (e) { print("Error fetching activities: $e"); } } 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( 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); }); ActivityService().createActivity(newActivity); Navigator.pop(context); } }, child: const Text("Lägg till aktivitet"), ), ], ), ), ), ), ); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( backgroundColor: const Color(0xFF2E2E2E), centerTitle: true, title: const Text( "Hantera Kalender", style: TextStyle( color: Color(0xFFDAA520), fontWeight: FontWeight.bold, ), ), ), floatingActionButton: FloatingActionButton( onPressed: _showDialogCalendar, 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), ), ], ), 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"), ), ], ), ); } }, ), ); }, ), ); } }