import 'package:flutter/material.dart'; import 'package:insparkspokalen_ui/models/teamModel.dart'; import 'createTeamsButton.dart'; // Importera CreateTeamsButton import 'package:insparkspokalen_ui/services/teamService.dart'; import 'package:provider/provider.dart'; /// Sida för administratörer att hantera lag class TeamPageAdmin extends StatefulWidget { const TeamPageAdmin({super.key}); @override State createState() => _TeamPageAdminState(); } class _TeamPageAdminState extends State { late TeamService groupService; List groups = []; final TextEditingController _controller = TextEditingController(); @override void initState() { groupService = Provider.of(context, listen: false); // Hämtar den injicerade instansen super.initState(); _loadGroups(); // Ladda lag vid uppstart } Future _loadGroups() async { final result = await groupService.showTeams(); setState(() { groups = result; }); } void _deleteGroup(int groupId, String groupName) async { final success = await groupService.removeTeam(groupId, groupName); if (success) { setState(() { groups.removeWhere((g) => g.id == groupId); }); ScaffoldMessenger.of(context).showSnackBar( SnackBar(content: Text('Lag "$groupName" borttaget.')), ); } else { ScaffoldMessenger.of(context).showSnackBar( const SnackBar(content: Text('Det gick inte att radera laget.')), ); } } /// Visar dialogruta för att skapa nytt lag void _openDialog() { showDialog( context: context, builder: (_) => CreateTeamsButton( controller: _controller, onTeamCreated: (newGroup) { setState(() { groups.add(newGroup); // Lägg till det nya laget i listan }); }, ), ); } /// Visar dialogruta för att bekräfta radering void _showDeleteDialog(int groupId, String groupName) { showDialog( context: context, builder: (context) { return AlertDialog( title: const Text('Bekräfta radering'), content: Text('Är du säker på att du vill radera "$groupName"?'), actions: [ TextButton( onPressed: () => Navigator.of(context).pop(), child: const Text('Nej'), ), TextButton( onPressed: () { Navigator.of(context).pop(); _deleteGroup(groupId, groupName); }, child: const Text('Ja'), ), ], ); }, ); } /// Visar information om lagets medlemmar (ej implementerad) void _showMemberDialog(String groupName) { showDialog( context: context, builder: (BuildContext context) { return AlertDialog( title: Text("Medlemmar i $groupName"), content: const Text("Här kommer du att kunna se och flytta medlemmar (funktionalitet ännu ej implementerad)."), actions: [ TextButton( onPressed: () => Navigator.of(context).pop(), child: const Text("Stäng"), ), ], ); }, ); } /// Bygger UI:t för adminsidan @override Widget build(BuildContext context) { return Scaffold( backgroundColor: const Color(0xFF2E2E2E), body: Column( children: [ const SizedBox(height: 32), const Text( 'Admin - Hantera lag', style: TextStyle(color: Colors.amber, fontSize: 26), ), Expanded( child: ListView.builder( itemCount: groups.length, itemBuilder: (context, index) { final group = groups[index]; return Card( color: Colors.white, margin: const EdgeInsets.symmetric(vertical: 6, horizontal: 12), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(12), ), child: ListTile( title: Text(group.name), subtitle: Align( alignment: Alignment.centerLeft, child: IntrinsicWidth( child: OutlinedButton( onPressed: () => _showMemberDialog(group.name), style: OutlinedButton.styleFrom( padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 6), side: const BorderSide(color: Color(0xFF2E2E2E)), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(8), ), ), child: const Text( 'Hantera medlemmar', style: TextStyle( fontSize: 10, color: Color(0xFF2E2E2E), ), ), ), ), ), trailing: IconButton( icon: const Icon(Icons.delete, color: Colors.red), onPressed: () => _showDeleteDialog(group.id, group.name), ), ), ); }, ), ), ElevatedButton( onPressed: _openDialog, style: ElevatedButton.styleFrom( backgroundColor: Colors.grey, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(40), ), ), child: const Text('Skapa nytt lag', style: TextStyle(color: Colors.white)), ), const SizedBox(height: 16), const Text('Endast administratörer', style: TextStyle(color: Colors.white70)), ], ), ); } }