diff --git a/src/components/mika/telegram/TelegramOnboardingWizard.tsx b/src/components/mika/telegram/TelegramOnboardingWizard.tsx index 2f013d1..798a341 100644 --- a/src/components/mika/telegram/TelegramOnboardingWizard.tsx +++ b/src/components/mika/telegram/TelegramOnboardingWizard.tsx @@ -34,6 +34,23 @@ export function TelegramOnboardingWizard({ open, onOpenChange, initialStep }: Pr const [step, setStep] = useState(1); const [validated, setValidated] = useState(null); + // Deriva o passo inicial do estado real do agente. + // Só pula para passos avançados se houver evidência concreta no banco. + function deriveStepFromAgent(): number { + if (!agent) return 1; + const hasToken = !!agent.telegram_bot_token_vault_id; + const hasUsername = !!agent.telegram_bot_username; + const webhookOk = !!agent.telegram_webhook_configured; + const firstMsg = !!agent.telegram_first_message_received_at; + + // Token validado + webhook configurado → aguardando 1ª mensagem (ou já recebida) + if (hasToken && hasUsername && (webhookOk || firstMsg)) return 4; + // Token validado mas webhook ainda não → ainda no passo do token (3) + if (hasToken && hasUsername) return 3; + // Sem token: sempre começa do início + return 1; + } + // Inicializa step ao abrir useEffect(() => { if (!open) return; @@ -41,16 +58,26 @@ export function TelegramOnboardingWizard({ open, onOpenChange, initialStep }: Pr setStep(Math.min(Math.max(initialStep, 1), TOTAL_STEPS)); return; } + const derived = deriveStepFromAgent(); + // Se o agente ainda não tem token, ignora qualquer valor antigo do localStorage + if (derived === 1 && typeof window !== "undefined") { + window.localStorage.removeItem(STORAGE_KEY); + setStep(1); + return; + } if (typeof window !== "undefined") { const stored = window.localStorage.getItem(STORAGE_KEY); const parsed = stored ? Number(stored) : NaN; - if (Number.isFinite(parsed) && parsed >= 1 && parsed <= TOTAL_STEPS) { + // Usa o maior entre o derivado e o salvo, limitado ao derivado + // (nunca avança além do que o estado real permite) + if (Number.isFinite(parsed) && parsed >= 1 && parsed <= derived) { setStep(parsed); return; } } - setStep(1); - }, [open, initialStep]); + setStep(derived); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [open, initialStep, agent?.telegram_bot_token_vault_id, agent?.telegram_webhook_configured, agent?.telegram_first_message_received_at]); // Persiste step ao mudar useEffect(() => { diff --git a/src/hooks/use-agent-instance.ts b/src/hooks/use-agent-instance.ts index 1f35f29..d3e8081 100644 --- a/src/hooks/use-agent-instance.ts +++ b/src/hooks/use-agent-instance.ts @@ -10,6 +10,7 @@ export interface AgentInstance { uuid_tenant: string; status: string; telegram_bot_username: string | null; + telegram_bot_token_vault_id: string | null; telegram_webhook_configured: boolean; telegram_token_invalid: boolean; telegram_first_message_received_at: string | null; @@ -30,7 +31,7 @@ export function useAgentInstance() { const { data, error } = await supabase .from("agent_instances") .select( - "id, user_id, uuid_tenant, status, telegram_bot_username, telegram_webhook_configured, telegram_token_invalid, telegram_first_message_received_at, telegram_connected_at, telegram_onboarding_completed, created_at", + "id, user_id, uuid_tenant, status, telegram_bot_username, telegram_bot_token_vault_id, telegram_webhook_configured, telegram_token_invalid, telegram_first_message_received_at, telegram_connected_at, telegram_onboarding_completed, created_at", ) .eq("user_id", user!.id) .maybeSingle();