import { SlashCommandBuilder, EmbedBuilder } from 'discord.js';

export default {
	data: new SlashCommandBuilder()
		.setName('userinfo')
		.setDescription('Show info about a user')
		.addMentionableOption(option =>
			option.setName('user')
				.setDescription('Which user you want to see the info of?')
				.setRequired(false)),
	category: 'utility',
	alias: ['user'],
	async execute(interaction, args, client) {
		await interaction.guild.members.fetch();
		let member = interaction.member;
		let user = interaction.user;
		if (args.user) {
			user = client.users.resolve(args.user);
			member = interaction.guild.members.resolve(args.user);
		}
		const Embed = new EmbedBuilder()
			.setColor(member ? member.displayHexColor : 'Navy')
			.setAuthor({ name: `${user.tag} (${user.id})`, iconURL:  user.displayAvatarURL() })
			.addFields(
				{ name: 'Current rank hex color', value: member ? member.displayHexColor : 'No rank color', inline: true },
				{ name: 'Joined guild at', value: member ? member.joinedAt.toString() : 'Not in this guild', inline: true },
				{ name: 'Date when account created', value: user.createdAt.toString(), inline: true },
			)
			.setTimestamp();


		Embed.addFields({ name: '​', value: '​' });

		// Show user status
		/* Missing presence intent.
		if (user.presence.activities[0]) {
			Embed.addField('Presence', user.presence.activities[0], true);
			if (user.presence.activities[0].details) Embed.addField('​', user.presence.activities[0].details, true);
			if (user.presence.activities[0].state) Embed.addField('​', user.presence.activities[0].state, true);
		}
        */
		// Is the user a bot?
		if (user.bot) Embed.addFields({ name: 'Is a bot?', value: '✅', inline: true });

		// Show on which platform they are using discord from if its not a bot
		/* Missing presence intent.
		if (user.presence.clientStatus && !user.bot) {
			Embed.addFields({ name: '​', value: '​' });
			if (user.presence.clientStatus.mobile) Embed.addFields({ name: 'Using discord on', value: '📱 ' + user.presence.clientStatus.mobile, inline: true });
			if (user.presence.clientStatus.desktop) Embed.addFields({ name: 'Using discord on', value: '💻 ' + user.presence.clientStatus.desktop, inline: true });
			if (user.presence.clientStatus.web) Embed.addFields({ name: 'Using discord on', value: '☁️ ' + user.presence.clientStatus.web, inline: true });
		}
        */

		if (member) {
			// Show since when this user have been boosting the current guild
			if (member.premiumSince) Embed.addFields({ name: 'Boosting this guild since', value: member.premiumSince.toString(), inline: true });
			// Show guild nickname
			if (member.nickname) Embed.addFields({ name: 'Nickname', value: member.nickname, inline: true });
			// Show member roles
			if (member.roles) {
				Embed.addFields({ name: 'Roles', value: `${[...member.roles.cache.values()].join(', ')}` });
				Embed.addFields({ name: 'Permissions', value: `\`${member.permissions.toArray().join(', ')}\`` });
			}
		}

		return interaction.reply({ embeds: [Embed] });
	},
};
