import 'package:comunic/helpers/conversations_helper.dart';
import 'package:comunic/lists/users_list.dart';
import 'package:comunic/models/conversation.dart';
import 'package:comunic/utils/date_utils.dart';
import 'package:comunic/utils/intl_utils.dart';
import 'package:flutter/material.dart';

/// Single conversation tile
///
/// @author Pierre HUBERT

typedef OpenConversationCallback = void Function(Conversation);

class ConversationTile extends StatelessWidget {
  final Conversation conversation;
  final UsersList usersList;
  final OpenConversationCallback onOpen;

  const ConversationTile(
      {Key key,
      @required this.conversation,
      @required this.usersList,
      @required this.onOpen})
      : assert(conversation != null),
        assert(usersList != null),
        assert(onOpen != null),
        super(key: key);

  _buildSubInformation(IconData icon, String content) {
    return Row(
      children: <Widget>[
        Icon(
          icon,
          size: 15.0,
          color: Colors.grey,
        ),
        Text(" " + content),
      ],
    );
  }

  @override
  Widget build(BuildContext context) {
    return ListTile(
      onTap: () => onOpen(conversation),
      // Conversation name
      title: Text(
        ConversationsHelper.getConversationName(
          conversation,
          usersList,
        ),
        style: TextStyle(
          fontWeight: conversation.sawLastMessage ? null : FontWeight.bold,
        ),
      ),

      // Leading icon
      leading: Icon(
        conversation.sawLastMessage ? Icons.check_circle : Icons.lens,
        color: conversation.sawLastMessage ? null : Colors.blue,
      ),

      // Conversation information
      isThreeLine: true,
      subtitle: Column(
        crossAxisAlignment: CrossAxisAlignment.stretch,
        children: <Widget>[
          _buildSubInformation(
              Icons.access_time, diffTimeFromNowToStr(conversation.lastActive)),
          _buildSubInformation(
            Icons.group,
            conversation.members.length == 1
                ? tr("1 member")
                : tr(
                    "%num% members",
                    args: {
                      "num": conversation.members.length.toString(),
                    },
                  ),
          ),
        ],
      ),
    );
  }
}