import 'package:flutter_riverpod/flutter_riverpod.dart';

/// Convite que o app recebeu mas ainda não conseguiu usar.
///
/// Existe porque o deep link pode chegar com o app **deslogado** — e é o caso
/// mais comum, já que quem recebe o convite muitas vezes nem tem conta. Sem
/// guardar o token, o participante entraria no app e o convite se perderia,
/// obrigando-o a voltar ao WhatsApp para copiar o código de novo. É exatamente
/// o passo extra que faz o convidado desistir.
final convitePendenteProvider = NotifierProvider<ConvitePendente, String?>(
  ConvitePendente.new,
);

class ConvitePendente extends Notifier<String?> {
  @override
  String? build() {
    // **Riverpod 3 descarta todo provider por padrão** quando ninguém escuta.
    // O router grava o token dentro do `redirect` e ninguém observa esse
    // provider naquele instante — sem `keepAlive`, o token era perdido antes de
    // a tela inicial existir, e o deep link abria o app sem fazer nada.
    ref.keepAlive();
    return null;
  }

  void guardar(String token) {
    final limpo = token.trim();
    if (limpo.isEmpty) return;
    state = limpo;
  }

  /// Devolve e limpa numa operação: o token é de uso único, e deixá-lo no
  /// estado faria o app tentar entrar de novo a cada volta à tela inicial.
  String? consumir() {
    final atual = state;
    state = null;
    return atual;
  }
}
