import 'package:flutter/material.dart';

import '../../../../api/marianumcloud/talk/get_reactions/get_reactions.dart';
import '../../../../api/marianumcloud/talk/get_reactions/get_reactions_response.dart';
import '../../../../model/account_data.dart';
import '../../../../widget/centered_leading.dart';
import '../../../../widget/emoji_text.dart';
import '../../../../widget/loading_spinner.dart';
import '../../../../widget/placeholder_view.dart';
import '../../../../widget/user_avatar.dart';
import '../data/open_direct_chat.dart';

class MessageReactions extends StatefulWidget {
  final String token;
  final int messageId;
  const MessageReactions({
    super.key,
    required this.token,
    required this.messageId,
  });

  @override
  State<MessageReactions> createState() => _MessageReactionsState();
}

class _MessageReactionsState extends State<MessageReactions> {
  late Future<GetReactionsResponse> data;

  @override
  void initState() {
    super.initState();
    data = GetReactions(
      chatToken: widget.token,
      messageId: widget.messageId,
    ).run();
  }

  @override
  Widget build(BuildContext context) => Scaffold(
    appBar: AppBar(title: const Text('Reaktionen')),
    body: FutureBuilder(
      future: data,
      builder: (context, snapshot) {
        if (snapshot.connectionState == ConnectionState.waiting) {
          return const LoadingSpinner();
        }
        if (snapshot.data!.data.isEmpty) {
          return const PlaceholderView(
            icon: Icons.search_off_outlined,
            text: 'Keine Reaktionen gefunden!',
          );
        }
        return ListView(
          children: [
            ...snapshot.data!.data.entries.map<Widget>(
              (entry) => ExpansionTile(
                textColor: Theme.of(context).colorScheme.onSurface,
                collapsedTextColor: Theme.of(context).colorScheme.onSurface,
                iconColor: Theme.of(context).colorScheme.onSurface,
                collapsedIconColor: Theme.of(context).colorScheme.onSurface,

                subtitle: const Text('Tippe für mehr'),
                leading: CenteredLeading(EmojiText(entry.key)),
                title: Text('${entry.value.length} mal reagiert'),
                children: entry.value.map((e) {
                  final isSelf = AccountData().getUsername() == e.actorId;
                  final isGuest =
                      e.actorType ==
                      GetReactionsResponseObjectActorType.guests;
                  return ListTile(
                    leading: UserAvatar(id: e.actorId, isGroup: false),
                    title: Text(e.actorDisplayName),
                    subtitle: isSelf
                        ? const Text('Du')
                        : isGuest
                        ? const Text('Gast')
                        : null,
                    trailing: isSelf || isGuest
                        ? null
                        : IconButton(
                            tooltip: 'Private Nachricht',
                            onPressed: () => openOrCreateDirectChat(
                              context,
                              actorId: e.actorId,
                              actorDisplayName: e.actorDisplayName,
                            ),
                            icon: const Icon(Icons.textsms_outlined),
                          ),
                  );
                }).toList(),
              ),
            ),
          ],
        );
      },
    ),
  );
}
