import 'package:flutter/material.dart';

import '/models/messages.dart';
import '/components/custom_circle_avatar.dart';
import '/models/conversations.dart';
import '/views/main/conversation/detail.dart';
import '/utils/time.dart';

class ConversationListItem extends StatefulWidget {
  final Conversation conversation;
  const ConversationListItem({
    Key? key,
    required this.conversation,
  }) : super(key: key);

  @override
  _ConversationListItemState createState() => _ConversationListItemState();
}

class _ConversationListItemState extends State<ConversationListItem> {
  late Conversation conversation;
  late Message? recentMessage;
  bool loaded = false;

  @override
  Widget build(BuildContext context) {
    return GestureDetector(
      behavior: HitTestBehavior.opaque,
      onTap: () {
        loaded ? Navigator.push(context, MaterialPageRoute(builder: (context){
          return ConversationDetail(
            conversation: conversation,
          );
        })).then(onGoBack) : null;
      },

      child: Container(
         padding: const EdgeInsets.only(left: 16,right: 0,top: 10,bottom: 10),
         child: !loaded ? null : Row(
           children: <Widget>[
             Expanded(
               child: Row(
                 children: <Widget>[
                   CustomCircleAvatar(
                     initials: widget.conversation.name[0].toUpperCase(),
                     image: widget.conversation.icon,
                   ),
                   const SizedBox(width: 16),
                   Expanded(
                     child: Align(
                       alignment: Alignment.centerLeft,
                       child: Container(
                         color: Colors.transparent,
                         child: Column(
                           crossAxisAlignment: CrossAxisAlignment.start,
                           children: <Widget>[
                             Text(
                               widget.conversation.name,
                               style: const TextStyle(fontSize: 16)
                             ),
                             recentMessage != null ?
                               const SizedBox(height: 2) :
                               const SizedBox.shrink(),
                             recentMessage != null ?
                               Text(
                                 recentMessage!.getContent(),
                                 overflow: TextOverflow.ellipsis,
                                 maxLines: 1,
                                 style: TextStyle(
                                   fontSize: 13,
                                   color: Colors.grey.shade600,
                                   fontWeight: conversation.isRead ? FontWeight.normal : FontWeight.bold,
                                 ),
                               ) :
                               const SizedBox.shrink(),
                         ],
                        ),
                      ),
                    ),
                  ),
                  recentMessage != null ?
                      Padding(
                        padding: const EdgeInsets.only(left: 10),
                        child: Text(
                          convertToAgo(recentMessage!.createdAt, short: true),
                          style: TextStyle(
                            fontSize: 13,
                            color: Colors.grey.shade600,
                          ),
                        )
                      ):
                      const SizedBox.shrink(),
                ],
              ),
            ),
          ],
        ),
      ),
    );
  }

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

  Future<void> getConversationData() async {
    conversation = widget.conversation;
    recentMessage = await conversation.getRecentMessage();
    loaded = true;
    setState(() {});
  }

  onGoBack(dynamic value) async {
    conversation = await getConversationById(widget.conversation.id);
    setState(() {});
  }
}
