import 'dart:async';
import 'package:flutter/material.dart';
import 'package:jiffy/jiffy.dart';
import 'package:marianum_mobile/api/marianumcloud/talk/chat/richObjectStringProcessor.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 Scaffold(
      appBar: AppBar(
        title: const Text("Talk"),
        actions: [
          IconButton(
            icon: const Icon(Icons.search),
            onPressed: () => {},
          )
        ],
      ),
      body: 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()}: ${RichObjectStringProcessor.parseToString(chatRoom.lastMessage.message.replaceAll("\n", " "), chatRoom.lastMessage.messageParameters)}", 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(
                    room: 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),
          );
        },
      ),
    );
  }
}