// telegram/handlers/groupHandler.js
const shared_consts = require('../../tools/shared_nodejs');
const tools = require('../../tools/general');
const { User } = require('../../models/user');

const InlineConferma = { RISPOSTA_SI: 'SI_', RISPOSTA_NO: 'NO_' };

/**
 * Gestisce conferma/rifiuto a richieste di GRUPPO
 * Payload data:
 *  - action
 *  - username (mittente originale)
 *  - userDest (destinatario/utente da aggiungere)
 *  - groupId  (id o path del gruppo)
 *  - groupname (nome del gruppo)
 */
async function handleGroup({ bot, cl, idapp, msg, data, user, userDest, username_action }) {
  let notifyText = '';

  // SI → accetta richiesta d'ingresso nel gruppo
  if (data.action === InlineConferma.RISPOSTA_SI + shared_consts.CallFunz.RICHIESTA_GRUPPO) {
    // Se l’app ha funzioni di persistenza specifiche, usale se esistono
    // (non assumo nomi rigidi per non rompere il deploy)
    if (typeof User.setGroupCmd === 'function') {
      try {
        await User.setGroupCmd(idapp, data.userDest || data.username, data.groupId, shared_consts.GROUPCMD.ADDUSERTOGROUP, 1, username_action, { groupname: data.groupname });
      } catch (e) {
        console.warn('handleGroup:setGroupCmd non eseguito:', e.message);
      }
    }

    // Messaggi di conferma
    await cl.sendMsg(msg.chat.id, `✅ ${data.userDest || data.username} è stato aggiunto al gruppo ${data.groupname || data.groupId}.`);
    // Notifica anche l’utente interessato
    const targetUsername = data.userDest || data.username;
    const teleg_id = await User.TelegIdByUsername(idapp, targetUsername);
    if (teleg_id) {
      await cl.sendMsg(teleg_id, `👥 Sei stato aggiunto al gruppo: ${data.groupname || data.groupId}`);
    }

    notifyText = 'Gruppo: aggiunta OK';
    return notifyText;
  }

  // NO → rifiuta/annulla richiesta
  if (data.action === InlineConferma.RISPOSTA_NO + shared_consts.CallFunz.RICHIESTA_GRUPPO) {
    if (typeof User.setGroupCmd === 'function') {
      try {
        await User.setGroupCmd(idapp, data.userDest || data.username, data.groupId, shared_consts.GROUPCMD.REMOVEUSERFROMGROUP, 0, username_action, { groupname: data.groupname });
      } catch (e) {
        console.warn('handleGroup:setGroupCmd non eseguito:', e.message);
      }
    }

    await cl.sendMsg(msg.chat.id, '🚫 Richiesta gruppo rifiutata.');
    // Avvisa il richiedente
    const targetUsername = data.userDest || data.username;
    const teleg_id = await User.TelegIdByUsername(idapp, targetUsername);
    if (teleg_id) {
      await cl.sendMsg(teleg_id, `❌ La tua richiesta per il gruppo ${data.groupname || data.groupId} è stata rifiutata.`);
    }

    notifyText = 'Gruppo: rifiutata';
    return notifyText;
  }

  return 'OK';
}

module.exports = { handleGroup };
