import 'package:flutter/material.dart';

import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:matrix/matrix.dart';

class PermissionsListTile extends StatelessWidget {
  final String permissionKey;
  final int permission;
  final String? category;
  final void Function()? onTap;

  const PermissionsListTile({
    Key? key,
    required this.permissionKey,
    required this.permission,
    this.category,
    this.onTap,
  }) : super(key: key);

  String getLocalizedPowerLevelString(BuildContext context) {
    if (category == null) {
      switch (permissionKey) {
        case 'users_default':
          return L10n.of(context)!.defaultPermissionLevel;
        case 'events_default':
          return L10n.of(context)!.sendMessages;
        case 'state_default':
          return L10n.of(context)!.configureChat;
        case 'ban':
          return L10n.of(context)!.banFromChat;
        case 'kick':
          return L10n.of(context)!.kickFromChat;
        case 'redact':
          return L10n.of(context)!.deleteMessage;
        case 'invite':
          return L10n.of(context)!.inviteContact;
      }
    } else if (category == 'notifications') {
      switch (permissionKey) {
        case 'rooms':
          return L10n.of(context)!.notifications;
      }
    } else if (category == 'events') {
      switch (permissionKey) {
        case EventTypes.RoomName:
          return L10n.of(context)!.changeTheNameOfTheGroup;
        case EventTypes.RoomPowerLevels:
          return L10n.of(context)!.editChatPermissions;
        case EventTypes.HistoryVisibility:
          return L10n.of(context)!.visibilityOfTheChatHistory;
        case EventTypes.RoomCanonicalAlias:
          return L10n.of(context)!.setInvitationLink;
        case EventTypes.RoomAvatar:
          return L10n.of(context)!.editRoomAvatar;
        case EventTypes.RoomTombstone:
          return L10n.of(context)!.replaceRoomWithNewerVersion;
        case EventTypes.Encryption:
          return L10n.of(context)!.enableEncryption;
        case 'm.room.server_acl':
          return L10n.of(context)!.editBlockedServers;
      }
    }
    return permissionKey;
  }

  @override
  Widget build(BuildContext context) {
    return ListTile(
      onTap: onTap,
      leading: CircleAvatar(
        backgroundColor: Theme.of(context).scaffoldBackgroundColor,
        foregroundColor: Colors.grey,
        child: const Icon(Icons.edit_attributes_outlined),
      ),
      title: Text(getLocalizedPowerLevelString(context)),
      subtitle: Row(
        children: [
          Container(
            padding: const EdgeInsets.all(4),
            decoration: BoxDecoration(
              color: Theme.of(context).secondaryHeaderColor,
              borderRadius: BorderRadius.circular(8),
            ),
            child: Center(
              child: Text(permission.toString()),
            ),
          ),
          const SizedBox(width: 8),
          Text(permission.toLocalizedPowerLevelString(context)),
        ],
      ),
    );
  }
}

extension on int {
  String toLocalizedPowerLevelString(BuildContext context) {
    return this == 100
        ? L10n.of(context)!.admin
        : this >= 50
            ? L10n.of(context)!.moderator
            : L10n.of(context)!.participant;
  }
}
