import 'package:flutter/material.dart';
import 'package:jiffy/jiffy.dart';
import 'package:marianum_mobile/api/marianumcloud/talk/room/getRoomResponse.dart';
import 'package:marianum_mobile/data/chatList/chatListProps.dart';
import 'package:provider/provider.dart';
import 'package:shared_preferences/shared_preferences.dart';

import 'chatView.dart';

class ChatList extends StatefulWidget {
  const ChatList({Key? key}) : super(key: key);

  @override
  State<ChatList> createState() => _ChatListState();
}

class _ChatListState extends State<ChatList> {
  late String username;

  @override
  void initState() {
    super.initState();

    SharedPreferences.getInstance().then((value) => {
      username = value.getString("username")!
    });

    WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
      Provider.of<ChatListProps>(context, listen: false).run();
    });
  }

  @override
  Widget build(BuildContext context) {

    return Consumer<ChatListProps>(
      builder: (context, data, child) {

        if(data.primaryLoading()) {
          return const Center(child: CircularProgressIndicator());
        }

        List<ListTile> chats = List<ListTile>.empty(growable: true);

        for (var chatRoom in data.getRoomsResponse.sortByLastActivity()) {

          CircleAvatar circleAvatar = CircleAvatar(
            foregroundImage: chatRoom.type == GetRoomResponseObjectConversationType.oneToOne ? Image.network("https://cloud.marianum-fulda.de/avatar/${chatRoom.name}/128").image : null,
            backgroundColor: Theme.of(context).primaryColor,
            foregroundColor: Colors.white,
            child: chatRoom.type == GetRoomResponseObjectConversationType.group ? const Icon(Icons.group) : const Icon(Icons.person),
          );

          chats.add(ListTile(
            title: Text(chatRoom.displayName),
            subtitle: Text("${Jiffy.unixFromSecondsSinceEpoch(chatRoom.lastMessage.timestamp).fromNow()}: ${chatRoom.lastMessage.message.replaceAll("\n", " ")}", overflow: TextOverflow.ellipsis),
            trailing: Visibility(
              visible: chatRoom.unreadMessages > 0,
              child: Container(
                padding: const EdgeInsets.all(1),
                decoration: BoxDecoration(
                  color: Theme.of(context).primaryColor,
                  borderRadius: BorderRadius.circular(30),
                ),
                constraints: const BoxConstraints(
                  minWidth: 20,
                  minHeight: 20,
                ),
                child: Text(
                  "${chatRoom.unreadMessages}",
                  style: const TextStyle(
                    color: Colors.white,
                    fontSize: 15,
                  ),
                  textAlign: TextAlign.center,
                ),
              ),
            ),
            leading: circleAvatar,
            onTap: () async {
              Navigator.of(context).push(MaterialPageRoute(builder: (context) {
                return ChatView(
                  user: chatRoom,
                  selfId: username,
                  avatar: circleAvatar,
                );
              }));
            },
          ));
        }

        return RefreshIndicator(
          color: Theme.of(context).primaryColor,
          onRefresh: () {
            Provider.of<ChatListProps>(context, listen: false).run(renew: true);
            return Future.delayed(const Duration(seconds: 3));
          },
          child: ListView(children: chats),
        );
      },
    );
  }
}