// Komandy, který buď nějakým způsobem mění funkci nebo "vzhled" bota
// nebo donutí bota něco udělat (odeslání zprávy s výsledkem nebo smazání originální zprávy se nepočítá)

const akce = { hraj: 'PLAYING', sleduj: 'WATCHING', poslouchej: 'LISTENING', soutez: 'COMPETING', soutěž: 'COMPETING', nedelej: '', nedělej: '' };
const zarizeni = { desktop: 'Počítač', mobile: 'Mobil', web: 'Web' };
const statusy = { online: '🟢', idle: '🟡', dnd: '🔴' };
const ping = /^<@!?\d+>$/;

module.exports = {
  more_komand: (mes, komand, celArgs) => {
    switch (komand) {

      case 'online':
      case 'onlajn':
      case 'zelenej':
        mes.client.user.setStatus('online');
        mes.channel.send('ano pane');
        break;

      case 'neviditelnej':
      case 'offline':
      case 'oflajn':
        mes.client.user.setStatus('invisible');
        mes.channel.send('ano pane');
        break;

      case 'dnd':
      case 'nerusit':
      case 'nerušit':
      case 'červenej':
      case 'cervenej':
        mes.client.user.setStatus('dnd');
        mes.channel.send('ano pane');
        break;

      case 'žlutej':
      case 'zlutej':
      case 'afk':
      case 'idle':
      case 'nepřítomnej':
      case 'nepritomnej':
        mes.client.user.setStatus('idle');
        mes.channel.send('ano pane');
        break;

      case 'hraj':
      case 'sleduj':
      case 'poslouchej':
      case 'soutez':
      case 'soutěž':
      case 'nedelej':
      case 'nedělej':
        mes.client.user.setActivity(celArgs, { type: akce[komand] });
        mes.channel.send('ano pane');
        mes.react('730175107313565717');
        break;

      case 'fight':
      case 'figh':
      case 'fajt':
        if (!ping.test(celArgs)) {
          mes.channel.send('tak si kokot ti kokote');
          break;
        }
        const vyherce = Math.round(Math.random()) ? mes.author : celArgs;
        mes.channel.send(`tento figh vyhrál: ${vyherce}!`);
        break;

      case 'status':
        if (!ping.test(celArgs)) {
          mes.channel.send('tak si kokot ti kokote');
          break;
        }
        const uzivatel = mes.mentions.users.first();
        const embed = {
          title: `Informace o statusech pro ${uzivatel.username}:`,
          color: 431075
        };
        const presence = uzivatel.presence.clientStatus;
        if (!presence) {
          embed.description = '*Všude je offline*';
        } else {
          const uStatusy = [];
          Object.keys(presence).forEach(status => {
            uStatusy.push(`${zarizeni[status]}: ${statusy[presence[status]]}`);
          });
          embed.description = uStatusy.join('\n');
        }
        mes.channel.send({ embed });
        break;

      case 'zareaguj':
      case 'reakce':
      case 'reaguj':
        if (!celArgs) {
          mes.channel.send('retard');
          break;
        }

        const emouty = celArgs.match(/<a?:\w{1,32}:\d+>/g);
        if (!emouty) {
          mes.channel.send('retard');
          break;
        }
        let naCo;

        (async () => {
          if (mes.reference) {
            naCo = await mes.channel.messages.fetch(mes.reference.messageID);
          } else {
            const msgs = [...mes.channel.messages.cache.values()];
            naCo = msgs[msgs.length - 2];
          }

          emouty.forEach(emout => naCo.react(emout));
          mes.delete();
        })();
        break;

      default:
        return false;
    }
    return true;
  }
};
