## PP-3 — Contagem de tempo restante por jogo

**PRD:** `docs/prd/palpite-e-prazo.md`

**Como** participante casual, **quero** ver quanto tempo falta para o prazo
de cada jogo fechar, **para** não perder a rodada por não saber a hora.

**Prioridade:** Must — "não sei quanto tempo falta" é o primeiro motivo de
abandono levantado na Fase 1.

**Critérios de aceite:**

- Dado que um jogo tem prazo aberto, quando vejo a lista, então vejo quanto
  tempo falta para fechar, sem precisar calcular.
- Dado que o relógio do meu celular está adiantado ou atrasado, quando vejo
  a contagem, então ela reflete o horário do servidor, não o do device.
- Dado que a contagem chega a zero com a tela aberta, então o jogo passa a
  aparecer como fechado sem eu precisar recarregar.
- Dado que estou num fuso diferente do horário do jogo, quando o horário é
  exibido, então o fuso fica indicado.

**Tasks:**

_Backend_
- [x] `BE-1` Expor o horário do servidor e o horário de fechamento de cada jogo na resposta da lista
- [x] `BE-2` Garantir que a decisão "prazo aberto/fechado" venha do servidor, não seja inferida pelo app

_Mobile_
- [x] `FE-1` Calcular e exibir o tempo restante a partir do offset entre horário do servidor e do device (depende de BE-1)
- [x] `FE-2` Transição automática para "fechado" quando a contagem zera, sem recarregar
- [x] `FE-3` Exibir horário no fuso local com o fuso indicado quando for decisivo

_QA_
- [x] `QA-1` Escrever o plano de casos de teste a partir desta story
- [x] `QA-2` Executar o plano com o relógio do device alterado para frente e para trás

**Riscos/Dependências:**

- **Este é o teste que protege a regra mais importante do PRD.** Alterar o
  relógio do device não pode dar mais tempo de palpite a ninguém.
- Depende de PP-1 para existir a lista.
- Offset de horário precisa ser recalculado quando o app volta do background.

- **06/08:** `FE-3` foi feita mostrando o horário do jogo no fuso do aparelho
  **com o fuso escrito** (derivado do offset, sem base de fusos no app). Só a
  contagem não diz *quando*, e horário em UTC faz o participante achar que tem
  horas a mais.
- `FE-2` é o tique de 30s que recalcula o estado sem recarregar da rede; há
  teste com o kickoff antes do horário do servidor mostrando campo desabilitado
  e etiqueta "prazo fechado".

- **07/08 — QA:** plano em `docs/testes/PP-3-plano.md`, execução em
  `docs/testes/PP-3-execucao.md` (**11/11 ✅**), com o caso que a story pede
  executado **em device**: relógio do emulador adiantado 3 h e depois atrasado 3 h,
  contagem idêntica nos dois casos (`fecha em 56d 9h`), enquanto o relógio do
  aparelho mostrava 11:47 e 05:52. O teste de unidade **injeta** o desvio; o device
  o **produz** — se o offset estivesse invertido ou zerado, a unidade continuaria
  verde.
- **Limite conhecido registrado:** o desvio é medido na **carga** da tela. Mudar o
  relógio com a tela aberta desloca a contagem até a próxima recarga. Não
  corrigido de propósito: cenário exótico, o servidor continua decidindo aceitar
  ou recusar, e recalcular a cada tick custaria uma chamada de rede por segundo.
